【发布时间】:2013-09-25 04:21:54
【问题描述】:
基本上,我有一个 URL,我正在点击它来获取一些 XML 数据。端点我不能透露,但在做:
curl -v "http://my-url.com/some/endpoint"
立即返回 200 OK 内容。
使用 Kenneth Reitz 的请求模块,我有一个 POST 请求和一个 GET 请求,它们都需要 30 秒才能返回内容。
如果我这样使用:
from timeit import Timer
t = Timer(lambda: requests.get(myurl).content)
print t.timeit(number=1)
30.2136261463
每次平均需要 30.2 秒。与我的 POST 请求相同。如果我不要求内容而只要求 status_code 响应,我会得到同样的情况,除非我通过 stream=True,我会快速得到响应,但不能得到内容。 p>
我的困惑在于 curl 命令...我在 10 毫秒内得到响应和内容。我尝试在我的 python 测试中伪造用户代理,尝试将大量参数传递给 get() 函数等。 curl 和 python-requests 如何执行我不知道的请求之间一定存在一些主要区别。我是新手,所以如果我遗漏了一些明显的东西,我深表歉意。
我还想提一下,我为此尝试了多台机器、多个版本的 curl、python,甚至尝试了一些 REST 客户端,如 Postman 等。只有 curl 执行速度快——顺便说一句,在每种情况下都达到相同的端点。我知道其中一个选项是在我的测试中调用子进程来 curl,但是……这是个好主意吗?
编辑: 我关心内容。我知道我可以快速获得响应代码(标题)。
提前致谢,
提霍米尔。
更新:
我现在在我的测试中使用 pycurl2,所以这只是一种解决方法,因为我希望我可以对所有事情都使用 python-requests。仍然很好奇为什么 curl 这么快。
【问题讨论】:
-
python requests is slow 的可能重复项
-
上述线程的解决方案满足 OP,因为他们不关心内容。我需要内容,就我而言,这很慢。
标签: python curl httprequest python-requests