2012-04-01 11 views
7

Ben şöyle BAŞ istekte bulunmaya urllib2 kullanabilirsiniz: Python HTTP HEAD - yönlendirmeler düzgün bir şekilde çalışıyor mu?

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

sorun yönlendirmeleri takip, bunun yerine HEAD GET kullandığı görünmesidir.

Bu HEAD isteğinin amacı, indirmek üzere olduğum URL'nin boyut ve içerik türünü kontrol etmekti, böylece bazı büyük belgeleri indiremediğimden emin olabilirsiniz. (URL, IRC aracılığıyla rastgele bir internet kullanıcısı tarafından sağlanır).

Yönlendirmeleri takip ederken HEAD isteklerini nasıl kullanabilirim?

+3

[İstekler] (http://docs.python-requests.org/en/latest/index.html) en azından bunu iddia Doğru yol (en azından, yönlendirme davranışlarını idempotent metotlar için çalıştığı gibi belgelendirir ve özellikle dokümanlarda HEAD'ı çağırır). –

+0

Benzer bir çözüm: http://stackoverflow.com/questions/9890815/python-get-headers-only-using-urllib2/9892207#9892207 – newtover

cevap

3

İyi soru! urllib2'u kullanarak ayarladıysanız, kendi yönlendirme işleyicinizin inşası hakkında this answer'a bakmak isteyeceksiniz. (: Pervasızca ilgili kişiden çalıntı okuyun): Kısaca

doğrularını belirtildiği gibi

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 

Ayrıca, Python Requests kullanabilirsiniz.

+1

Bulduğun bilgilere dayanarak bu yönlendirme işleyicisini kullanarak sona erdim: http://pastebin.com/m7aN21A7 Teşekkürler! – Krenair

+0

@Krenair Yardımlardan memnun oldum! – MrGomez

9

Sen requests kütüphane ile bunu yapabilirsiniz:

>>> import requests 
>>> r = requests.head('http://github.com', allow_redirects=True) 
>>> r 
<Response [200]> 
>>> r.history 
[<Response [301]>] 
>>> r.url 
u'https://github.com/' 
İlgili konular