22

pycurlとlibcurlのドキュメントの調査に時間を費やしても、pycurlでHTTPステータスメッセージ(reason-phrase)を取得する(簡単な)方法をまだ見つけることができません。

ステータスコードは簡単です:

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"
4

4 に答える 4

31

私は自分で解決策を見つけました。これは必要なことを実行しますが、より堅牢になる可能性があります(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"
于 2010-04-29T11:02:08.420 に答える
8

これは古いスレッドですが、私はここで同様の情報を探しました。200、404、500など、探しているステータスコードだけの場合は、次のようにします。

your_curl_handle.getinfo(pycurl.RESPONSE_CODE)

数値のステータスコードを返す必要があります:)

于 2016-08-20T02:07:16.180 に答える
2

human_curlライブラリを使用して簡単なコードを作成できると思います。

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

https://github.com/Lispython/human_curlで入手できるhuman_curlに関する完全なドキュメント

于 2012-04-14T08:40:05.937 に答える
-1

BaseHTTPServer.BaseHTTPRequestHandler.responsesを試してください。このページで説明されているように、エラーコード辞書が含まれている必要があります。

お役に立てれば。

于 2010-04-28T09:48:57.283 に答える