साथ शीर्ष लेख को पढ़ने के लिए मैं कैसे पढ़ा करते हैं प्रतिक्रिया हेडर एक PyCurl अनुरोध से लौटे?कैसे pycurl
उत्तर
कई समाधान कर रहे हैं (डिफ़ॉल्ट रूप से, वे गिरा दिया जाता है)। यहाँ विकल्प HEADERFUNCTION जो आप उन्हें संभालने के लिए एक समारोह का संकेत देता है का उपयोग कर एक उदाहरण है।
अन्य समाधान विकल्प हैं WRITEHEADER ( WRITEFUNCTION के साथ संगत नहीं) या हेडर को सही पर सेट करना ताकि वे शरीर के साथ प्रसारित हो जाएं।
#!/usr/bin/python
import pycurl
import sys
class Storage:
def __init__(self):
self.contents = ''
self.line = 0
def store(self, buf):
self.line = self.line + 1
self.contents = "%s%i: %s" % (self.contents, self.line, buf)
def __str__(self):
return self.contents
retrieved_body = Storage()
retrieved_headers = Storage()
c = pycurl.Curl()
c.setopt(c.URL, 'http://www.demaziere.fr/eve/')
c.setopt(c.WRITEFUNCTION, retrieved_body.store)
c.setopt(c.HEADERFUNCTION, retrieved_headers.store)
c.perform()
c.close()
print retrieved_headers
print retrieved_body
यह हो सकता है या आप के लिए एक विकल्प नहीं हो सकता है:
import urllib
headers = urllib.urlopen('http://www.pythonchallenge.com').headers.headers
Anothr वैकल्पिक, human_curl उपयोग: human_curl पिप
In [1]: import human_curl as hurl
In [2]: r = hurl.get("http://stackoverflow.com")
In [3]: r.headers
Out[3]:
{'cache-control': 'public, max-age=45',
'content-length': '198515',
'content-type': 'text/html; charset=utf-8',
'date': 'Thu, 01 Sep 2011 11:53:43 GMT',
'expires': 'Thu, 01 Sep 2011 11:54:28 GMT',
'last-modified': 'Thu, 01 Sep 2011 11:53:28 GMT',
'vary': '*'}
जब 'आयात करने human_curl' मैं कह' ImportError त्रुटि हो रही है: pycurl: libcurl लिंक-tiume ssl baqckend (एनएसएस) संकलित समय एसएसएल बैकएंड से अलग है (कोई नहीं/अन्य) ' –
import pycurl
from StringIO import StringIO
headers = StringIO()
c = pycurl.Curl()
c.setopt(c.URL, url)
c.setopt(c.HEADER, 1)
c.setopt(c.NOBODY, 1) # header only, no body
c.setopt(c.HEADERFUNCTION, headers.write)
c.perform()
print headers.getvalue()
आवश्यक के रूप में किसी अन्य कर्ल setopts जोड़े/वांछित, जैसे कि FOLLOWLOCATION।
ऐसा एकमात्र उत्तर लगता है जो केवल हेडर लाता है। –
मैं सामग्री को पुनः प्राप्त करने के लिए बिना इस का उपयोग करना चाहते हैं। क्या इसको हासिल करने के लिए कोई रास्ता है? मेरी सामग्री बड़ी है (1.4 जीबी या इसी तरह की), और मुझे केवल आकार को जानने की जरूरत है, सामग्री नहीं। – Alfe
@Alfe बनाने के लिए '' '' बजाय का HEAD''' अनुरोध कोशिश '' GET''', '' 'c.setopt (pycurl.CUSTOMREQUEST," सिर ")' की तरह कुछ '' – Serge
वाह, यह एक देर हो चुकी है अनुवर्ती, लेकिन वैसे भी धन्यवाद। लेकिन अब यह तो बहुत पहले है ... ठीक है, हो सकता है कि मैं इसे इस तरह से किया था, लेकिन वास्तव में, मुझे याद नहीं कर सकते हैं: -} – Alfe