首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python中的HEAD请求未按预期工作

python中的HEAD请求未按预期工作
EN

Stack Overflow用户
提问于 2012-09-26 22:18:47
回答 3查看 981关注 0票数 1

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

代码语言:javascript
运行
复制
class HeadRequest(urllib2.Request):
    def get_method(self):
        return "HEAD"

当我像这样使用它时:

代码语言:javascript
运行
复制
response = urllib2.urlopen(HeadRequest("http://www.nativeseeds.org/"))

它抛出以下异常:

代码语言:javascript
运行
复制
HTTPError: HTTP Error 503: Service Temporarily Unavailable

然而,当我在firefox/restclient中打开上面的网址"http://www.nativeseeds.org/“时,它返回200个状态代码。

任何帮助都将受到高度的感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-26 22:34:10

您看到的问题与Python无关。网站本身似乎需要比HEAD请求更多的东西。即使是一个简单的telnet会话也会导致以下错误:

代码语言:javascript
运行
复制
$ telnet www.nativeseeds.org 80
Trying 208.113.230.85...
Connected to www.nativeseeds.org (208.113.230.85).
Escape character is '^]'.
HEAD / HTTP/1.1
Host: www.nativeseeds.org

HTTP/1.1 503 Service Temporarily Unavailable
Date: Wed, 26 Sep 2012 14:29:33 GMT
Server: Apache
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=iso-8859-1

尝试添加更多标头;http命令行客户端确实收到200响应:

代码语言:javascript
运行
复制
$ http -v head http://www.nativeseeds.org
HEAD / HTTP/1.1
Host: www.nativeseeds.org
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Accept-Encoding: identity, deflate, compress, gzip
Accept: */*
User-Agent: HTTPie/0.2.2

HTTP/1.1 200 OK
Date: Wed, 26 Sep 2012 14:33:21 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=34hOijDSzeskKYtULx9V83; path=/
Last-Modified: Wed, 26 Sep 2012 14:33:23 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 20
Content-Type: text/html; charset=utf-8
票数 3
EN

Stack Overflow用户

发布于 2012-09-26 22:56:58

经过一番调查后,网站要求同时设置AcceptUser-Agent请求头。否则,它将返回503。这个坏得很厉害。它似乎也在进行用户代理嗅探。当使用curl时,我得到了403:

代码语言:javascript
运行
复制
$ 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

但如果我将user-agent设置为Firefox,则可以正常工作:

代码语言:javascript
运行
复制
$ 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模块工作:

代码语言:javascript
运行
复制
>>> 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'}
票数 4
EN

Stack Overflow用户

发布于 2012-09-26 22:41:16

Reading urllib2 docs,get_method仅返回'GET‘或'POST’。

You may be interested in this.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12603809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档