我正在研究python 2.7脚本,它必须在20'000对象中检查Fedora Commons存储库中是否存在某些数据。 基本上这意味着向存储库(运行在Tomcat服务器上)的20'000个不同URL发送20'000个HTTP请求。python,通过一个网络连接发送很多HTTP请求
我写了一个脚本来完成这项工作,但服务器系统管理员提醒我它会打开太多的网络连接,这会导致一些麻烦。
我的脚本使用到目前为止urllib2发出HTTP请求。
response = urllib2.urlopen(url)
response_content = response.read()
实际上,此代码为每个请求打开一个新的网络连接。
我试图使用其他库来提出请求,但找不到任何方式来重用所有请求的相同连接。下面的两个解决方案仍然会打开很多网络连接,即使它们的数量真的很少(实际上这两个解决方案似乎都会为100个HTTP请求打开一个连接,在我的情况下,这个连接仍然大约有200个连接)。
httplib的:
url = "http://localhost:8080/fedora/objects/test:1234?test="
url_infos = urlparse(url)
conn = httplib.HTTPConnection(url_infos.hostname + ":" + str(url_infos.port))
for x in range(0, 20000):
myurl = url + str(x)
conn.request("GET", myurl)
r = conn.getresponse()
response_content = r.read()
print x, "\t", myurl, "\t", r.status
请求:
url = "http://localhost:8080/fedora/objects/test:1234?test="
s = requests.Session()
for x in range(0, 20000):
myurl = url + str(x)
r = s.get(myurl)
response_content = r.content
print x, "\t", myurl, "\t", r.status_code
即使连接数要好得多,最好我想使用所有的请求的一个或很少的连接。这甚至有可能吗?每个连接有100个请求与系统或服务器有关吗?顺便说一句,我也试图使请求指向一个Apache服务器,结果是一样的。
我最好的猜测是这与服务器有关,而不是Python代码。你的两个解决方案都使用'httlib.HTTPConnection'(请求使用这个),但是这个类在它的任何地方都没有神奇数字100。我责怪服务器。 – Lukasa
您使用的是哪个版本的请求?从当前版本的文档:'感谢urllib3,在一个会话中保持活动是100%自动的! ' – brechin