Skip to main content
 首页 » 编程设计

python之python 中的 HEAD 请求无法正常工作

2025年05月04日13lidabo

我正在尝试使用以下代码检查 Python 中任何 URL 的状态代码

class HeadRequest(urllib2.Request): 
    def get_method(self): 
        return "HEAD" 

当我这样使用它时:

response = urllib2.urlopen(HeadRequest("http://www.nativeseeds.org/")) 

它抛出以下异常:

HTTPError: HTTP Error 503: Service Temporarily Unavailable 

但是,当我在 firefox/restclient 中打开上述 URL“http://www.nativeseeds.org/”时,它返回 200 状态代码。

我们将不胜感激任何帮助。

请您参考如下方法:

经过一些调查,该网站要求同时设置Accept 和User-Agent 请求 header 。否则,它返回 503。这非常糟糕。它似乎也在进行用户代理嗅探。使用 curl 时出现 403:

$ curl --head http://www.nativeseeds.org/ 
HTTP/1.1 403 Forbidden 
Date: Wed, 26 Sep 2012 14:54:59 GMT 
Server: Apache 
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM" 
Set-Cookie: f65129b0cd2c5e10c387f919ac90ad66=PjZxNjvNmn6IlVh4Ac-tH0; path=/ 
Vary: Accept-Encoding 
Content-Type: text/html 

但如果我将用户代理设置为 Firefox,则工作正常:

$ curl --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" --head http://www.nativeseeds.org/ 
HTTP/1.1 200 OK 
Date: Wed, 26 Sep 2012 14:55:57 GMT 
Server: Apache 
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM" 
Expires: Mon, 1 Jan 2001 00:00:00 GMT 
Cache-Control: post-check=0, pre-check=0 
Pragma: no-cache 
Set-Cookie: f65129b0cd2c5e10c387f919ac90ad66=ykOpGnEE%2CQOMUaVJLnM7W0; path=/ 
Last-Modified: Wed, 26 Sep 2012 14:56:27 GMT 
Vary: Accept-Encoding 
Content-Type: text/html; charset=utf-8 

它似乎可以使用 requests模块:

>>> import requests 
>>> r = requests.head('http://www.nativeseeds.org/') 
>>> import pprint; pprint.pprint(r.headers) 
{'cache-control': 'post-check=0, pre-check=0', 
 'content-encoding': 'gzip', 
 'content-length': '20', 
 'content-type': 'text/html; charset=utf-8', 
 'date': 'Wed, 26 Sep 2012 14:58:05 GMT', 
 'expires': 'Mon, 1 Jan 2001 00:00:00 GMT', 
 'last-modified': 'Wed, 26 Sep 2012 14:58:09 GMT', 
 'p3p': 'CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"', 
 'pragma': 'no-cache', 
 'server': 'Apache', 
 'set-cookie': 'f65129b0cd2c5e10c387f919ac90ad66=2NtRrDBra9jPsszChZXDm2; path=/', 
 'vary': 'Accept-Encoding'}