Как сделать HTTP-запрос POST к API с Oauth2 в Python - PullRequest
0 голосов
/ 04 октября 2019

Я пытался выяснить, как сделать POST в API (в данном случае в Goodreads), используя библиотеку ouath2 , но я остаюсь в тупике, поскольку на выходе всегда есть сообщение об ошибке,

Я обращаюсь к ответам в этом вопросе о стековом потоке .

Ниже - документация API Goodread, над которой я сейчас работаю.

Следуйте за автором
Заставьте зарегистрированного пользователя следовать за автором, используя OAuth. Вам нужно будет зарегистрировать свое приложение (обязательно). URL: https://www.goodreads.com/author_followings?id=AUTHOR_ID&format=xml
Метод HTTP: POST

ниже - моя 1-я попытка POST: (сообщение об ошибке: не является допустимой строкой)объект последовательности или сопоставления )

import oauth2 as oauth
import urllib.parse

url = 'https://www.goodreads.com/author_followings?'
parameters = {'id' : '1077326',
              'format' : 'xml',
             }
echo_base_url = url + urllib.parse.urlencode(parameters)

consumer = oauth.Consumer(key ='J9l5Jsn...........', secret='N8cWf4Da...bynGVQ..........')
client = oauth.Client(consumer)

resp, content = client.request(
                echo_base_url,
                method = "POST",
                body= urllib.parse.urlencode(None),
                headers= None,
                force_auth_header=True,
                )
print (resp, content)

моя вторая попытка: (сообщение об ошибке: request () получил неожиданный аргумент ключевого слова 'force_auth_header' )

import oauth2 as oauth, urllib.parse

def oauth_req(url, key, secret, http_method="POST", post_body=None, http_headers=None):
    CONSUMER_KEY = key
    CONSUMER_SECRET = secret
    consumer = oauth.Consumer(key=CONSUMER_KEY, secret=CONSUMER_SECRET)
    #token = oauth.Token(key=key, secret=secret)
    client = oauth.Client(consumer)
    resp, content = client.request(
        url,
        method=http_method,
        body=urllib.parse.urlencode({'status': post_body}),
        headers=http_headers,
        force_auth_header=True,
    )
    return content

oauth_req('https://www.goodreads.com/author_followings?id=1077326&format=xml', 'J9l5.......', 'N8........QYIg70ru.......FVoYc', http_method="POST", post_body=None, http_headers=None)

До сих пор я мог только делать GET и пробовал POST, но не нашел ни одного кода, который бы работал ни разу. Нужно просветление здесь ..

1 Ответ

0 голосов
/ 04 октября 2019

Используйте инструмент API и сначала получите результаты от него: Curl, SOAPUI и т. Д ... После получения правильных результатов запроса POST переместите эти данные в свой код.


для первого сообщения об ошибкеодин из массивов имеет неправильный формат - параметры, запрос или ответ.

...