Как прочитать ответ из запросов Python?

У меня есть два скрипта Python. Один использует библиотеку Urllib2, а другой - Библиотека запросов.

Я нашел, что запросы проще реализовать, но я не могу найти эквивалент для функции urlib2 read(). Например:

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

Как только я создаю свой почтовый URL, data = response.read() дает мне содержимое - я пытаюсь подключиться к экземпляру API vcloud Director, а в ответе отображаются конечные точки, к которым у меня есть доступ. Однако, если я использую библиотеку запросов следующим образом.....

....

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"

....

.... print post_call.text и print post_call.content ничего не возвращают, хотя код состояния равен 200 в запросах после вызова.

Почему мой ответ от Requests не возвращает текст или контент?

Ответ 1

Запросы не имеют эквивалента 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 преуспел в конце концов.

Ответ 2

Если ответ в json, вы можете сделать что-то вроде (python3):

import json
import requests as reqs

# Make the HTTP request.
response = reqs.get('http://demo.ckan.org/api/3/action/group_list')

# Use the json module to load CKAN response into a dictionary.
response_dict = json.loads(response.text)

for i in response_dict:
    print("key: ", i, "val: ", response_dict[i])