2012-04-01 16 views
7

私はそうのようなHEADリクエストを行うためにurllib2のを使用することができます。 Python HTTP HEAD - リダイレクトを正しく処理していますか?

import urllib2 
request = urllib2.Request('http://example.com') 
request.get_method = lambda: 'HEAD' 
urllib2.urlopen(request) 

問題は、これはリダイレクトを以下のとき、それはHEADの代わりにGET使用していることを表示されていることです。

このHEADリクエストの目的は、ダウンロードしようとしているURLのサイズとコンテンツタイプを確認して、巨大なドキュメントをダウンロードしないようにすることです。 (URLは、IRCを介してランダムなインターネットユーザーから提供されます)。

リダイレクトをフォローするときにHEADリクエストを使用するにはどうすればよいですか?

+3

[要望](http://docs.python-requests.org/en/latest/index.html)が、少なくともこれを行うと主張(少なくとも、それは冪等のメソッドのために働いているそのリダイレクトの振る舞いを文書化し、特に文書の中でHEADを呼び出す)。 –

+0

似たような解決策:http://stackoverflow.com/questions/9890815/python-get-headers-only-using-urllib2/9892207#9892207 – newtover

答えて

3

良い質問! urllib2を使用するように設定されている場合は、独自のリダイレクトハンドラの作成についてはthis answerを参照してください。要するに

(読み:露骨前の回答から盗まれた):

import urllib2 

#redirect_handler = urllib2.HTTPRedirectHandler() 

class MyHTTPRedirectHandler(urllib2.HTTPRedirectHandler): 
    def http_error_302(self, req, fp, code, msg, headers): 
     print "Cookie Manip Right Here" 
     return urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers) 

    http_error_301 = http_error_303 = http_error_307 = http_error_302 

cookieprocessor = urllib2.HTTPCookieProcessor() 

opener = urllib2.build_opener(MyHTTPRedirectHandler, cookieprocessor) 
urllib2.install_opener(opener) 

response =urllib2.urlopen("WHEREEVER") 
print response.read() 

print cookieprocessor.cookiejar 

また、正誤表で説明したように、あなたは、Python Requestsを使用することができます。

+1

私はあなたが見つけたものに基づいて、このリダイレクトハンドラを使い終わった:http:///pastebin.com/m7aN21A7 ありがとう! – Krenair

+0

@Krenair喜んで助けてください! – MrGomez

9

あなたはrequestsライブラリでこれを行うことができます。

>>> import requests 
>>> r = requests.head('http://github.com', allow_redirects=True) 
>>> r 
<Response [200]> 
>>> r.history 
[<Response [301]>] 
>>> r.url 
u'https://github.com/' 
関連する問題