web-dev-qa-db-ja.com

(py)curlでHTTPステータスメッセージを取得する方法は?

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"
21
mykhal

自分で解決策を見つけました。これは必要なことを実行しますが、より堅牢になる可能性があります(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"
28
mykhal

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

your_curl_handle.getinfo(pycurl.RESPONSE_CODE)

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

5
Kalabaaz

Human_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

2
Alexandr