连接错误:因连接方在超时时间内未正确响应而导致连接尝试失败
我正在用Python开发一些软件,利用Steam的API。我使用Flask来运行和测试我的Python代码。一切都很顺利,但现在我遇到了一个错误(我没有改过任何代码):
('连接中断。', error(10060, '连接尝试失败,因为连接方在一段时间后没有正确响应,或者已建立的连接因为连接的主机没有响应而失败'))
我不知道为什么会出现这个错误,因为代码之前运行得很好,突然就出现了这个错误,而且我没有改动过代码、电脑或Flask。
代码如下:
import urllib
import itertools
import urllib2
import time
from datetime import datetime
from bs4 import BeautifulSoup
from flask import Flask
import requests
import json
import xml.etree.ElementTree as ET
from xml.dom.minidom import parseString
import sys
app = Flask(__name__)
API_KEY = 'XXX'
API_BASEURL = 'http://api.steampowered.com/'
API_GET_FRIENDS = API_BASEURL + 'ISteamUser/GetFriendList/v0001/?key='+API_KEY+'&steamid='
API_GET_SUMMARIES = API_BASEURL + 'ISteamUser/GetPlayerSummaries/v0002/?key='+API_KEY+'&steamids='
PROFILE_URL = 'http://steamcommunity.com/profiles/'
steamIDs = []
myFriends = []
class steamUser:
def __init__(self, name, steamid, isPhisher):
self.name = name
self.steamid = steamid
self.isPhisher = isPhisher
def setPhisherStatus(self, phisher):
self.isPhisher = phisher
@app.route('/DeterminePhisher/<steamid>')
def getFriendList(steamid):
try:
r = requests.get(API_GET_FRIENDS+steamid)
data = r.json()
for friend in data['friendslist']['friends']:
steamIDs.append(friend['steamid'])
return isPhisher(steamIDs)
except requests.exceptions.ConnectionError as e:
return str(e.message)
def isPhisher(ids):
phisherusers = ''
for l in chunksiter(ids, 50):
sids = ','.join(map(str, l))
try:
r = requests.get(API_GET_SUMMARIES+sids)
data = r.json();
for i in range(len(data['response']['players'])):
steamFriend = data['response']['players'][i]
n = steamUser(steamFriend['personaname'], steamFriend['steamid'], False)
if steamFriend['communityvisibilitystate'] and not steamFriend['personastate']:
url = PROFILE_URL+steamFriend['steamid']+'?xml=1'
dat = requests.get(url)
if 'profilestate' not in steamFriend:
n.setPhisherStatus(True);
phisherusers = (phisherusers + ('%s is a phisher' % n.name) + ', ')
if parseString(dat.text.encode('utf8')).getElementsByTagName('privacyState'):
privacy = str(parseString(dat.text.encode('utf-8')).getElementsByTagName('privacyState')[0].firstChild.wholeText)
if (privacy == 'private'):
n.setPhisherStatus(True)
phisherusers = (phisherusers + ('%s is a phisher' % n.name) + ', ')
elif 'profilestate' not in steamFriend:
n.setPhisherStatus(True);
phisherusers = (phisherusers + ('%s is a phisher' % n.name) + ', ')
else:
steamprofile = BeautifulSoup(urllib.urlopen(PROFILE_URL+steamFriend['steamid']).read())
for row in steamprofile('div', {'class': 'commentthread_comment '}):
comment = row.find_all('div', 'commentthread_comment_text')[0].get_text().lower()
if ('phisher' in comment) or ('scammer' in comment):
n.setPhisherStatus(True)
phisherusers = (phisherusers + ('%s is a phisher' % n.name) + ', ')
myFriends.append(n);
except requests.exceptions.ConnectionError as e:
return str(e.message)
except:
return "Unexpected error:", sys.exc_info()[0]
return phisherusers
def chunksiter(l, chunks):
i,j,n = 0,0,0
rl = []
while n < len(l)/chunks:
rl.append(l[i:j+chunks])
i+=chunks
j+=j+chunks
n+=1
return iter(rl)
app.run(debug=True)
我想知道这个错误是什么意思,以及为什么会发生这种情况。提前谢谢大家的帮助。我非常感激。
3 个回答
4
我觉得这是因为steamcommunity的服务器不太稳定,或者是网络出现了问题。
通常情况下,你没办法解决网络波动的问题。不过还是有一些方法可以帮助你。
首先,当你遇到网络错误时,可以让你的程序暂停一秒钟,然后再试一次!
其次,我建议你使用Flask-Cache这个工具,比如设置缓存60秒,这样可以帮助你减少HTTP请求。
8
其实,这个不是flask的错误,主要是Python的socket错误。
10060这个错误看起来是个超时错误,可能是因为服务器响应得很慢。如果你在浏览器里能打开这个网站,那说明你的浏览器可能设置了更高的超时时间。
你可以试着在request.get()里增加请求的时间。
如果你可以访问远程服务器的话:你不需要绑定socket(除非远程服务器期待有连接进来)——这种情况其实很少见,通常连接的时候不需要这么做。