连接错误:连接尝试失败,因为连接方在一段时间后没有正确响应

Vis*_*yer 5 python runtime-error flask steam-web-api

我正在开发一些使用Steam API的python软件.我正在使用Flask来运行和测试python代码.一切都在膨胀,但现在我收到了这个错误(我没有更改任何代码):

('连接已中止.',错误(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)
Run Code Online (Sandbox Code Playgroud)

我想解释一下错误的含义,以及为什么会这样.提前致谢.我非常感谢你的帮助.

Har*_*ary 7

好吧,这不是烧瓶错误,它基本上是python套接字错误

因为10060似乎是超时错误,服务器接受速度是否可能很慢,如果网站在您的浏览器中打开,那么您的浏览器有可能有更高的超时阈值?

尝试增加request.get()中的请求时间

如果远程服务器也在您的访问权限下,那么:您不需要绑定套接字(除非远程服务器期望传入套接字) - 这实际上是连接的要求是非常罕见的.

  • requests.get("http://github.com", timeout=5) http://docs.python-requests.org/en/latest/user/quickstart/#timeouts (2认同)