Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:requests.exceptions.ConnectionError。url超过了最大重试次数_Python_Python Requests - Fatal编程技术网

Python:requests.exceptions.ConnectionError。url超过了最大重试次数

Python:requests.exceptions.ConnectionError。url超过了最大重试次数,python,python-requests,Python,Python Requests,以下是脚本: import requests import json import urlparse from requests.adapters import HTTPAdapter s = requests.Session() s.mount('http://', HTTPAdapter(max_retries=1)) with open('proxies.txt') as proxies: for line in proxies: proxy=json.load

以下是脚本:

import requests
import json
import urlparse
from requests.adapters import HTTPAdapter

s = requests.Session()
s.mount('http://', HTTPAdapter(max_retries=1))

with open('proxies.txt') as proxies:
    for line in proxies:
        proxy=json.loads(line)

    with open('urls.txt') as urls:
        for line in urls:

            url=line.rstrip()
            data=requests.get(url, proxies=proxy)
            data1=data.content
            print data1
            print {'http': line}
如您所见,它试图通过代理列表访问URL列表。以下是URL.txt文件:

http://api.exip.org/?call=ip
{"http":"http://107.17.92.18:8080"}
以下是proxies.txt文件:

http://api.exip.org/?call=ip
{"http":"http://107.17.92.18:8080"}
我在www.hidemyas.com上得到了这个代理。这可能是一个糟糕的代理吗?我试了好几次,结果就是这样。注意:如果您试图复制此代理,则可能需要在hidemyas.com上将代理更新为最近的代理。他们似乎最终停止了工作。 以下是完整的错误和回溯:

Traceback (most recent call last):
  File "test.py", line 17, in <module>
    data=requests.get(url, proxies=proxy)
  File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 55, in get
    return request('get', url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 44, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 335, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 454, in send
    history = [resp for resp in gen] if allow_redirects else []
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 144, in resolve_redirects
    allow_redirects=False,
  File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 438, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 327, in send
    raise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPConnectionPool(host=u'219.231.143.96', port=18186): Max retries exceeded with url: http://www.google.com/ (Caused by <class 'httplib.BadStatusLine'>: '')
回溯(最近一次呼叫最后一次):
文件“test.py”,第17行,在
data=requests.get(url,proxies=proxy)
文件“/usr/local/lib/python2.7/dist-packages/requests/api.py”,get中第55行
返回请求('get',url,**kwargs)
文件“/usr/local/lib/python2.7/dist-packages/requests/api.py”,请求中的第44行
return session.request(method=method,url=url,**kwargs)
文件“/usr/local/lib/python2.7/dist-packages/requests/sessions.py”,第335行,在请求中
resp=自我发送(准备,**发送)
文件“/usr/local/lib/python2.7/dist packages/requests/sessions.py”,第454行,在send中
历史记录=[resp for resp in gen]如果允许,则重定向else[]
文件“/usr/local/lib/python2.7/dist packages/requests/sessions.py”,第144行,在resolve_重定向中
允许重定向=错误,
文件“/usr/local/lib/python2.7/dist packages/requests/sessions.py”,第438行,在send中
r=适配器.send(请求,**kwargs)
文件“/usr/local/lib/python2.7/dist packages/requests/adapters.py”,第327行,在send中
升起连接器错误(e)
requests.exceptions.ConnectionError:HTTPConnectionPool(主机=u'219.231.143.96',端口=18186):url超过最大重试次数:http://www.google.com/ (由“”引起)

查看您提供的堆栈跟踪,您的错误是由
httplib.BadStatusLine
异常引起的,根据,异常是:

如果服务器使用我们不理解的HTTP状态代码响应,则引发

换句话说,代理服务器返回的内容(如果返回的话)不能被执行实际请求的httplib解析

根据我编写http代理的经验,我可以说一些实现可能没有严格遵循规范(http上的rfc规范实际上并不容易阅读),或者使用黑客来修复实现中存在缺陷的旧浏览器

因此,回答这个问题:

这可能是一个糟糕的代理吗

。。。我想说,这是可能的。唯一真正确定的方法是查看代理服务器返回的内容


尝试使用调试器或抓取数据包嗅探器(类似或)对其进行调试,以分析网络中发生的情况。了解代理服务器返回的确切信息应该可以为您提供解决此问题的密钥。

也许您在短时间内发送了太多请求,导致代理服务器过载,你说你从一个流行的免费代理网站上得到了代理,这意味着你不是唯一一个使用该服务器的人,而且它经常处于重载状态

如果在请求之间添加一些延迟,如下所示:

from time import sleep

[...]

data=requests.get(url, proxies=proxy)
data1=data.content
print data1
print {'http': line}
sleep(1)
(注意
睡眠(1)
,暂停代码执行一秒钟)

它有用吗

def hello(self):
    self.s = requests.Session()
    self.s.headers.update({'User-Agent': self.user_agent})
    return True

试试这个,它对我有用:)

你的例子中的缩进正确吗?因为你的
for
循环的主体没有缩进。这似乎会给我带来一个缩进错误。哦,天哪,你说得对。我把代码抄错了。问题仍然存在,你的循环仍然不对。当前代码将只使用proxies.txt中列出的最后一个代理。我的ISPs代理有确切的错误。我只看到了一个特定url(POST请求)的问题。我可以通过禁用代理来执行请求:
proxy={'https':None}
(使用https)。我没有使用httplib,除非它包含在请求库中?除此之外,你是说我的请求通过代理服务器到达网页,返回代理服务器,然后代理服务器试图传递给我的内容无法读取吗?@BigBoy1337关于httplib:似乎是间接使用的(在任何情况下,你的回溯中都有例外)。关于“您是说我的请求通过代理服务器到达网页,返回到代理服务器,然后代理服务器试图传递给我的内容无法读取?”:这是可能的,但不是必要的。目前我们所知道的是,代理的回复无效。。。。。。甚至在将请求传递到最终的web服务器之前,代理也可能遇到一些内部错误,因此代理以无效回复进行了回复。也有可能是在web服务器以对代理的有效回复进行回复后,代理中发生了此内部错误。最重要的是,web服务器可能会使用无效的RELEND回复代理,这反过来会导致代理的回复无效。正如我在回答中所说的,找出根本原因的最直接的方法是从代理获取更多关于实际回复内容的数据。难道“url超过最大重试次数”没有提供任何可能的线索吗?这意味着什么?听起来好像代理试图向web服务器发出请求,但它一直告诉它再试一次(导致一些错误)。@BigBoy1337不太可能。您的trackback可以解释为:无法执行请求(“错误消息的url[…]”部分超过了最大重试次数),这是由于之前某个地方引发的
httplib.BadStatusLine
异常(“错误消息的[…]”部分引起的)。请注意,没有关于引发
httplib.BadStatusLine
的原因的信息(文档除外)。请求始终在末尾添加异常的原始原因。requests.exceptions.ConnectionError:HTTPConnectionPool(主机=u'219.231.143.96',端口=18186):此示例中url超过了最大重试次数:(由:“”引起)。(由:“”引起)这意味着将更多未处理的HTTP计时为pa不会有问题