2016-06-11 4 views
1

Я использую 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? Кто-нибудь знает, что я делаю неправильно?

ответ

0

В качестве параметра запроса необходимо указать api_token. Конкатенация укусов как это

PIPEDRIVE_API_URL = "https://api.pipedrive.com/v1/" 
route = 'persons/123' 
api_token = '1234abcd1234abcd' 

response, data = http.request(PIPEDRIVE_API_URL + route + '?api_token=' + api_token, 
    method='GET', 
    headers={'Content-Type': 'application/x-www-form-urlencoded'}) 
+0

Спасибо. Но я думал, что тело = должно быть для параметров после вопросительного знака? Я понимаю, что сбивает с толку, что я назвал параметры для thing1/thing2/после домена. Параметры – InfiniteZoom

+0

, помещенные в 'body =', обычно имеют значение при выполнении запросов 'POST'. вы не должны использовать 'body = ...' в 'get'-запросах, а' api_token' не следует размещать там в соответствии с api docs –

+0

Gotcha. Благодаря! – InfiniteZoom

Смежные вопросы