Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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请求库-奇怪的行为与curl_Python_Curl_Python Requests - Fatal编程技术网

Python请求库-奇怪的行为与curl

Python请求库-奇怪的行为与curl,python,curl,python-requests,Python,Curl,Python Requests,我在比较这两个代码片段: subprocess.call('curl -XGET http://localhost:81/proxy/bparc/my_key > /dev/null' ,shell=True) vs 第一个总是在0.01秒内运行。但第二次测试有时需要30秒,而其他时间不到0.01秒 你知道会发生什么吗?请求是不是做了一些花哨的事情,让事情变慢了?运行len不好吗?好,改为response.content解决了这个问题。text为二进制数据提供了很多不需要的额外功能 re

我在比较这两个代码片段:

subprocess.call('curl -XGET http://localhost:81/proxy/bparc/my_key > /dev/null' ,shell=True)
vs

第一个总是在0.01秒内运行。但第二次测试有时需要30秒,而其他时间不到0.01秒


你知道会发生什么吗?请求是不是做了一些花哨的事情,让事情变慢了?运行len不好吗?

好,改为response.content解决了这个问题。text为二进制数据提供了很多不需要的额外功能

response = requests.get('http://localhost:81/proxy/bparc/my_key')
print len(response.content)

运行len也不错。这可能与curl在看到您不需要输出时停止读取数据有关,而请求无法这样做,因为lenresponse.text需要输出。但我不认为curl真的会这么做,所以…是的,requests.get步骤是即时的,所以我猜它不会下载数据直到你尝试访问它?我想知道是谁要求回复。文本导致对数据进行某些处理。我不知道为什么这只是一个确定的URL;requests.get基本上只读取一个数据包,除非响应的报头部分需要更多数据包;访问文本可以下载所有内容。但除了下载之外,它所做的唯一处理是从字节解码到unicode,这应该只需要很小的几分之一秒。如果你想排除响应处理,你可以改为访问,它下载原始字节,但不处理它们。但是,我再次怀疑这是个问题,这绝对是个问题。谢谢更改为lenresponse.content完全修复了它。我想只有特定的数据触发了这种缓慢,可能与内容有关。回复不是真的文本吗?在这种情况下,特别是如果您使用的是Python 2.6或3.0,但也可能使用2.7和3.1+,我可以想象解码需要很长时间。旧版本的代码必须为每一个无法解码的字符调用一个函数,并且没有办法将其短路。无论如何,r.text基本上只是r.content.decoder.encoding,这不是很多额外的东西,只是一个额外的东西。gzip解码等其他一切都已经在内容中发生了。它不是文本,而是二进制数据。看起来这就是问题所在。
response = requests.get('http://localhost:81/proxy/bparc/my_key')
print len(response.content)