Я использую python-pipedrive, чтобы обернуть API Pipedrive, хотя он не совсем работает из окна на python3 (который я использую), поэтому я его модифицировал. У меня возникают проблемы только с частью Http-запросов.Код Python для выполнения запроса GET из pipedrive API
Это то, что научил меня, как использовать httplib2: https://github.com/jcgregorio/httplib2/wiki/Examples-Python3
В принципе, я просто хочу, чтобы отправить запрос GET к этому: https://api.pipedrive.com/v1/persons/123?api_token=1234abcd1234abcd
Это работает:
from httplib2 import Http
from urllib.parse import urlencode
PIPEDRIVE_API_URL = "https://api.pipedrive.com/v1/persons/123?api_token=1234abcd1234abcd"
response, data = http.request(PIPEDRIVE_API_URL, method='GET',
headers={'Content-Type': 'application/x-www-form-urlencoded'})
Однако, Pipedrive возвращает ошибку 401 с «Вам необходимо получить разрешение на выполнение этого запроса». если я делаю это:
PIPEDRIVE_API_URL = "https://api.pipedrive.com/v1/"
parameters = 'persons/123'
api_token = '1234abcd1234abcd'
response, data = http.request(PIPEDRIVE_API_URL + parameters,
method='GET', body=urlencode(api_token),
headers={'Content-Type': 'application/x-www-form-urlencoded'})
Фактический ответ:
response =
{'server': 'nginx',
'status': '401',
'connection': 'keep-alive',
'set-cookie': 'pipe-session=7b6ddadbc67abdadb6a67dbadcb; path=/; domain=.pipedrive.com; secure; httponly',
'date': 'Sat, 11 Jun 2016 06:50:13 GMT',
'transfer-encoding': 'chunked',
'x-frame-options': 'SAMEORIGIN',
'content-type': 'application/json, charset=UTF-8',
'x-xss-protection': '1; mode=block'}
data =
{'success': False,
'error': 'You need to be authorized to make this request.'}
Как правильно обеспечить api_token в качестве параметра (тела) на запрос GET? Кто-нибудь знает, что я делаю неправильно?
Спасибо. Но я думал, что тело = должно быть для параметров после вопросительного знака? Я понимаю, что сбивает с толку, что я назвал параметры для thing1/thing2/после домена. Параметры – InfiniteZoom
, помещенные в 'body =', обычно имеют значение при выполнении запросов 'POST'. вы не должны использовать 'body = ...' в 'get'-запросах, а' api_token' не следует размещать там в соответствии с api docs –
Gotcha. Благодаря! – InfiniteZoom