web-dev-qa-db-ja.com

Python Requestsからの応答を読み取るにはどうすればよいですか?

2つのPythonスクリプトがあります。 1つは rllib2ライブラリ を使用し、1つは Requestsライブラリ を使用します。

Requestsの実装は簡単ですが、urlib2のread()関数に相当するものは見つかりません。例えば:

...
response = url.urlopen(req)
print response.geturl()
print response.getcode()
data = response.read()
print data

投稿URLを作成すると、data = response.read()がコンテンツを提供します。vclouddirector apiインスタンスに接続しようとしていますが、応答にはアクセスできるエンドポイントが表示されます。ただし、次のようにリクエストライブラリを使用する場合.....

....

def post_call(username, org, password, key, secret):

    endpoint = '<URL ENDPOINT>'
    post_url = endpoint + 'sessions'
    get_url = endpoint + 'org'
    headers = {'Accept':'application/*+xml;version=5.1', \
               'Authorization':'Basic  '+ base64.b64encode(username + "@" + org + ":" + password), \
               'x-id-sec':base64.b64encode(key + ":" + secret)}
    print headers
    post_call = requests.post(post_url, data=None, headers = headers)
    print post_call, "POST call"
    print post_call.text, "TEXT"
    print post_call.content, "CONTENT"
    post_call.status_code, "STATUS CODE"

....

....呼び出し後のリクエストでステータスコードが200であっても、print post_call.textおよびprint post_call.contentは何も返しません。

リクエストからの応答がテキストまたはコンテンツを返さないのはなぜですか?

40
Oli

リクエストには、Urlib2のread()と同等のものはありません。

>>> import requests
>>> response = requests.get("http://www.google.com")
>>> print response.content
'<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage"><head>....'
>>> print response.content == response.text
True

POSTリクエストは、コンテンツを返していないようです。多くの場合、POSTリクエストが該当します。おそらくそれはクッキーを設定しますか?ステータスコードは、POSTが成功したことを示しています。

86
aychedee