【发布时间】:2015-11-14 01:06:39
【问题描述】:
所以每秒我都会向网站 X 发出一堆请求,到目前为止,使用标准的 urllib 包就像这样(请求返回一个 json):
import urllib.request
import threading, time
def makerequests():
request = urllib.request.Request('http://www.X.com/Y')
while True:
time.sleep(0.2)
response = urllib.request.urlopen(request)
data = json.loads(response.read().decode('utf-8'))
for i in range(4):
t = threading.Thread(target=makerequests)
t.start()
但是,由于我在大约 500 次请求后提出了如此多的请求,因此网站返回 HTTPError 429: Too manyrequests。我想如果我重新使用初始 TCP 连接可能会有所帮助,但是我注意到使用 urllib 包是不可能做到这一点的。
所以我做了一些谷歌搜索,发现以下软件包可能会有所帮助:
-
Requests -
http.client -
socket?
所以我有一个问题:哪一个最适合我的情况,有人可以展示其中任何一个的示例(对于 Python 3)吗?
【问题讨论】:
-
回答你的问题
requests(可能)是最好的——它会自动处理保持活动。但实际上可能有帮助的是减少请求。 -
如果网站是限速请求,那么重用tcp连接可能就不行了。
-
我假设网站的系统管理员知道您在做什么以及为什么。如果不重复循环相同的请求,可能会被视为攻击,您的 IP 将在黑名单中结束。
标签: python sockets http tcp urllib