如何使用pycurl发送HEAD请求

4
我需要使用pycurl发送HTTP HEAD请求。
这段代码:
curl = pycurl.Curl()
...
curl.setopt(curl.CUSTOMREQUEST, "HEAD")
curl.perform()

产生一个错误:
< HTTP/1.1 200 OK
* Server nginx/1.6.2 is not blacklisted
< Server: nginx/1.6.2
< Date: # No matters
< Content-Type: text/html; charset=utf-8
< Connection: keep-alive
< Cache-Control: no-cache,no-store,must-revalidate
< Pragma: no-cache
< Expires: # No matters
< Last-Modified: # No matters
< Content-Security-Policy: # No matters
< X-Frame-Options: SAMEORIGIN
< X-XSS-Protection: # No matters
< X-Content-Type-Options: nosniff
< Content-Encoding: gzip
* no chunk, no close, no size. Assume close to signal end
< 
* Operation timed out after 15001 milliseconds with 0 bytes received
* Closing connection 1

有人能帮我吗?

2个回答

7
你需要使用NOBODY选项。就是说,请不要发送主体内容。仅更改CUSTOMREQUEST并不能使libcurl改变其行为,它会认为自己执行GET请求,但实际上你将其改为了HEAD请求,这会导致问题。请使用NOBODY选项来解决此问题。

1
谢谢。我添加了 curl.setopt(curl.NOBODY, True),现在它可以工作了! - StasEvseev

1

仅仅指定一个“NOBODY”选项就足以让PycURL自动生成一个“HEAD”请求,无需进行CUSTOMREQUEST!已经在PycURL/7.43.0 libcurl/7.51.0下测试通过。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接