【发布时间】:2017-01-06 18:11:30
【问题描述】:
我用requests来获取一个URL,比如:
while True:
try:
rv = requests.get(url, timeout=1)
doSth(rv)
except socket.timeout as e:
print e
except Exception as e:
print e
运行一段时间后,它退出工作。没有异常或任何错误,就像它被暂停一样。然后,我通过在控制台中键入 Ctrl+C 来停止该过程。说明进程正在等待数据:
.............
httplib_response = conn.getresponse(buffering=True) #httplib.py
response.begin() #httplib.py
version, status, reason = self._read_status() #httplib.py
line = self.fp.readline(_MAXLINE + 1) #httplib.py
data = self._sock.recv(self._rbufsize) #socket.py
KeyboardInterrupt
为什么会这样?有解决办法吗?
【问题讨论】:
-
它正在等待服务器发送数据,您在客户端无能为力。也许服务器故意限制你?
-
我想是的。而且我必须降低请求数据的频率,对吗?还有其他建议
-
Afait,这是您唯一的选择。请确保在设置
timeout-10ms时记住延迟,例如,这不太可能起作用。 -
这个问题的回答是否令人满意?我只是说我遇到了同样的问题,因为我正在使用请求并且 URL 可以在浏览器中正常工作(将 json 列表返回到我的浏览器),但是当我通过请求“获取”相同的 URL 时,它只是挂起.. .
-
@Surest-Texas 当我遇到这个问题时,我尝试使用 UserAgent (stackoverflow.com/questions/27652543/…) 发送类似浏览器的标头,但它仍然不起作用。最终我意识到浏览器正在使用 https,而我所要做的就是在我的
requests.get()调用中设置 https 而不是 http ... doh!