Python 2-də bir HTTP HEAD sorğu göndərmək üçün necə?

Mən burada çalışıram ki, MIME tipini təyin etmək üçün verilmiş URL-in başlığını almaqdır. http://somedomain/foo/ HTML sənədini və ya JPEG şəklini qaytarır. Beləliklə, məzmunu yükləmədən MIME növünü oxumaq üçün bir HEAD sorğunu göndərməyi necə başa düşməlisiniz. Hər kəs bunun nə qədər asan olduğunu bilirmi?

106
20 сент. set fuentesjr 20 sep . 2008-09-20 09:38 '08 at 9:38 2008-09-20 09:38
@ 11 cavab

redaktə : Bu cavab işləyir, amma indiyədək sütun kitabxanasından aşağıdakı digər cavablarda göstərildiyi kimi istifadə etməlisiniz.


Httplib istifadə edin.

 >>> import httplib >>> conn = httplib.HTTPConnection("www.google.com") >>> conn.request("HEAD", "/index.html") >>> res = conn.getresponse() >>> print res.status, res.reason 200 OK >>> print res.getheaders() [('content-length', '0'), ('expires', '-1'), ('server', 'gws'), ('cache-control', 'private, max-age=0'), ('date', 'Sat, 20 Sep 2008 06:43:36 GMT'), ('content-type', 'text/html; charset=ISO-8859-1')] 

Xüsusi başlığı əldə etmək üçün bir getheader(name) .

100
20 сент. Cavab Eevee Sep 20 tərəfindən verilir 2008-09-20 09:45 '08 saat 09:45 'da 2008-09-20 09:45

urllib2 HEAD tələbini yerinə yetirmək üçün istifadə edilə bilər. Bu, httplib istifadə etməkdən bir az daha yaxşıdır, çünki urllib2 sizin URL-i URL-i təhlil edir, bununla URL-ni host adına və yola ayırmaq tələb olunur.

 >>> import urllib2 >>> class HeadRequest(urllib2.Request): ... def get_method(self): ... return "HEAD" ... >>> response = urllib2.urlopen(HeadRequest("http://google.com/index.html")) 
border=0

Mövzular reply.info () vasitəsilə mövcuddur, əvvəlki kimi. Maraqlıdır ki, siz redaktə etdiyiniz URL tapa bilərsiniz:

 >>> print response.geturl() http://www.google.com.au/index.html 
104
15 янв. Cavab verilən cənab Jan 15 2010-01-15 13:50 '10 at 13:50 2010-01-15 13:50

Zəruri Requests Metodu:

 import requests resp = requests.head("http://www.google.com") print resp.status_code, resp.text, resp.headers 
53
21 окт. cavab verdi KZ 21 oktyabr. 2012-10-21 14:00 '12 saat 14:00 'da, 2012-10-21 14:00' də

Hesab edirəm ki, sorğu kitabxanasını da qeyd etməlisiniz.

35
12 сент. Cavab Dalius 12 Sentyabr verilir. 2011-09-12 15:02 '11 'də 15:02' də 2011-09-12 15:02

Yalnız:

 import urllib2 request = urllib2.Request('http://localhost:8080') request.get_method = lambda : 'HEAD' response = urllib2.urlopen(request) response.info().gettype() 

Edit: Mən yalnız httplib2 var: D

 import httplib2 h = httplib2.Http() resp = h.request("http://www.google.com", 'HEAD') assert resp[0]['status'] == 200 assert resp[0]['content-type'] == 'text/html' ... 

link mətni

15
12 дек. Cavab Paweł Prażak tərəfindən verilir 12 dekabr . 2010-12-12 15:45 '10 saat 15:45 'də 2010-12-12 15:45

Tamlığı naminə, Python3, httplib istifadə edərək qəbul edilən cavana bərabərdir.

Bu, əsasən, kitabxananın artıq httplib, lakin http.client adlı kodu eynidır

 from http.client import HTTPConnection conn = HTTPConnection('www.google.com') conn.request('HEAD', '/index.html') res = conn.getresponse() print(res.status, res.reason) 
7
15 марта '13 в 0:38 2013-03-15 00:38 Cavab Octavian Damiean'a 15 Mart '13 'də verildi 0:38 2013-03-15 00:38
 import httplib import urlparse def unshorten_url(url): parsed = urlparse.urlparse(url) h = httplib.HTTPConnection(parsed.netloc) h.request('HEAD', parsed.path) response = h.getresponse() if response.status/100 == 3 and response.getheader('Location'): return response.getheader('Location') else: return url 
2
10 февр. Cavab 10 fevralda Pranay Agarval tərəfindən verilir. 2012-02-10 15:39 '12 at 3:39 pm 2012-02-10 15:39

Bundan başqa, httplib (ən azı 2.5.2) istifadə edərkən, HEAD sorğunun cavabını oxumaq cəhdi (oxunan satırda) bloklanır və sonra uğursuz olacaq. Cavab oxumazsan, başqa bir əlaqə sorğu göndərə bilməyəcəksən, yenisini açmaq lazımdır. Və ya istəklər arasında uzun bir gecikmə.

1
23 апр. Cavab 23 Apreldə Nope tərəfindən verildi 2009-04-23 04:39 '09 da 4:39 'da 2009-04-23 04:39

Mən httplib urllib2-dən bir qədər daha sürətli olduğunu tapdım. İki proqramı başa çatdırdım: bunlardan biri httplib, digəri isə urllib2 istifadə edərək HEAD sorğularını 10,000 URL-lərə göndərdi. Bir httplib bir neçə dəqiqə daha sürətli idi. httplib ümumi stats: real 6m21.334s istifadəçi 0m2.124s sys 0m16.372s

üllib2 ümumi statistikası idi: real 9m1.380s istifadəçi 0m16.666s sys 0m28.565s

Hər kəsin bu barədə hər hansı bir məlumatı varmı?

1
13 апр. Igor Ganapolsky tərəfindən verilmiş cavab 13 aprel 2010-04-13 18:10 '10 at 6:10 pm 2010-04-13 18:10

Və bir daha yanaşma (Pavelin cavabına bənzər):

 import urllib2 import types request = urllib2.Request('http://localhost:8080') request.get_method = types.MethodType(lambda self: 'HEAD', request, request.__class__) 

Məhdud nümunə səviyyəli üsullardan qaçınmaq üçün.

0
06 июня '13 в 13:55 2013-06-06 13:55 Cavab 2013 - il iyun ayının 13-də saat 13.55-də veriləcək

Yəqin ki, daha asan: urllib və ya urllib2 istifadə edin.

 >>> import urllib >>> f = urllib.urlopen('http://google.com') >>> f.info().gettype() 'text/html' 

f.info () lüğət kimi bir obyektdir, f.info () ['content-type'] və s.

http://docs.python.org/library/urllib.html
http://docs.python.org/library/urllib2.html
http://docs.python.org/library/httplib.html

Sənədlər httplib adətən birbaşa istifadə edilmədiyini göstərir.

-4
11 дек. Cavab Andy tərəfindən verilir 11 dekabr. 2008-12-11 03:11 '08 at 3:11 pm 2008-12-11 03:11