2010-04-27 11 views
18

pycurl और libcurl दस्तावेज़ीकरण का अध्ययन करने में कुछ समय व्यतीत करना, मुझे अभी भी एक सरल (सरल) तरीका नहीं मिल रहा है, pycurl में HTTP स्थिति संदेश (कारण-वाक्यांश) कैसे प्राप्त करें।(पीई) कर्ल में HTTP स्थिति संदेश कैसे प्राप्त करें?

स्थिति कोड आसान है:

import pycurl 
import cStringIO 

curl = pycurl.Curl() 
buff = cStringIO.StringIO() 
curl.setopt(pycurl.URL, 'http://example.org') 
curl.setopt(pycurl.WRITEFUNCTION, buff.write) 
curl.perform() 

print "status code: %s" % curl.getinfo(pycurl.HTTP_CODE) 
# -> 200 

# print "status message: %s" % ??? 
# -> "OK" 

उत्तर

23

मुझे स्वयं एक समाधान मिला है, जो मुझे चाहिए, लेकिन अधिक मजबूत हो सकता है (HTTP के लिए काम करता है)।

यह इस तथ्य पर आधारित है कि pycurl.HEADERFUNCTION द्वारा प्राप्त कैप्चर हेडर को स्थिति रेखा शामिल है।

import pycurl 
import cStringIO 
import re 

curl = pycurl.Curl() 

buff = cStringIO.StringIO() 
hdr = cStringIO.StringIO() 

curl.setopt(pycurl.URL, 'http://example.org') 
curl.setopt(pycurl.WRITEFUNCTION, buff.write) 
curl.setopt(pycurl.HEADERFUNCTION, hdr.write) 
curl.perform() 

print "status code: %s" % curl.getinfo(pycurl.HTTP_CODE) 
# -> 200 

status_line = hdr.getvalue().splitlines()[0] 
m = re.match(r'HTTP\/\S*\s*\d+\s*(.*?)\s*$', status_line) 
if m: 
    status_message = m.groups(1) 
else: 
    status_message = '' 

print "status message: %s" % status_message 
# -> "OK" 
0

BaseHTTPServer.BaseHTTPRequestHandler.responses प्रयास करें, यह एक ERRORCODE dictionnary शामिल करना चाहिए के रूप में this page में विस्तार से बताया।

उम्मीद है कि इससे मदद मिलती है।

+0

है कि एक संभव है लौटना चाहिए समाधान .. मुझे यह इंगित करना चाहिए था कि मैं मानकीकृत एक – mykhal

2

मुझे लगता है कि आप कोड को सरल बनाने के लिए मानव_curl लाइब्रेरी का उपयोग कर सकते हैं।

>>> import human_curl as hurl 
>>> r = hurl.get('http://example.org') 
>>> print r.status_code 
200 

human_curl आप https://github.com/Lispython/human_curl

+0

"तर्क-वाक्यांश" की तुलना में सर्वर से स्थिति संदेश प्राप्त करना चाहता हूं, जो कि HTTP प्रोटोकॉल ड्यूक्यूशन द्वारा उपयोग किया जाने वाला शब्द है पठनीय स्ट्रिंग जो status_code के बाद आता है। यह उदाहरण सिर्फ संख्यात्मक स्थिति कोड देता है। –

1

पर प्राप्त कर सकते हैं पर सभी दस्तावेज़ यह एक पुरानी धागा है, लेकिन मैं यहाँ इसी तरह की जानकारी की तलाश में गया था। यदि यह महज स्थिति कोड आप देख रहे हैं, इस तरह के रूप में 200, 404 है, 500 आदि तो बस कार्य करें:

your_curl_handle.getinfo(pycurl.RESPONSE_CODE)

जो एक संख्यात्मक स्थिति कोड :)

संबंधित मुद्दे