인증 (access_token)이있는 Python 요청


84

API 쿼리를 파이썬으로 가져 오려고합니다. 명령 줄

curl --header "Authorization:access_token myToken" https://website.com/id

json 출력을 제공합니다. myToken은 전체적으로 일정하게 유지되는 16 진수 변수입니다. 다른 ID를 반복하고 출력을 분석 할 수 있도록 파이썬에서이 호출을 만들고 싶습니다. 어떤 아이디어? 인증이 필요하기 전에 urllib2를 사용했습니다. 또한 requests 모듈을 살펴 보았지만 그 방법을 알 수 없었습니다.

감사합니다.


전체 세션에 대한 인증 토큰 설정 : stackoverflow.com/a/47043335/911945
Anton Tarasenko

답변:


128

요청 (패키지는 다음과 같이 정의 헤더 작품을 추가, HTTP 요청에 대한 아주 좋은 API를 가지고 공식 문서를 소스 ) :

>>> import requests
>>> response = requests.get(
... 'https://website.com/id', headers={'Authorization': 'access_token myToken'})

외부 의존성을 사용하고 싶지 않다면, 표준 라이브러리의 urllib2를 사용하는 것과 같은 것은 다음과 같습니다 ( source : the missing manual ).

>>> import urllib2
>>> response = urllib2.urlopen(
... urllib2.Request('https://website.com/id', headers={'Authorization': 'access_token myToken'})

응답 해 주셔서 감사합니다. 두 구현을 모두 시도했지만 HTTP 오류 401 : 권한이 없습니다. 그러나 명령 줄은 잘 작동합니다. 저는 액세스 토큰으로 작업 한 적이 없으므로 명확하게하기 위해 제가 가지고있는 토큰은 3f4264ff 등의 40 자리 숫자입니다.
user1895406

1
이상한. 나를 조금 괴롭히는 것은 헤더의 콜론입니다 ... 아! 어쩌면 나는 (또는 우리 둘 다;) 그냥 잘못 읽었을 것입니다. 헤더의 이름은 "Authorization"이고 그 은 "access_token long_hexadecimal_string"이됩니다. 회전을 원하십니까?
wosc

작동했습니다! 정말 고맙습니다. 내가 입력이 URL입니다 결국은 = ' website.com/id : {'hex_string access_token이 '인증'} 고해상도 = requests.get (URL, 헤더 = 머리) 머리 = '
user1895406을

1
이 솔루션은 더 이상 사용되지 않거나 기본 Anaconda 설치에서 작동하지 않습니다.
bloodrootfc

1
API에 대한 액세스 권한이 있는지 확인하기 위해 서버가 사용하는 인증 토큰입니다. 액세스하려는 API에 대한 클라이언트 자격 증명 (사용자 이름, 암호, API 키)을 얻은 다음이를 인증 서버로 전송해야합니다 (예 : get 요청을 통해). 서버는 클라이언트에 JSON으로 인코딩 될 수있는 문자열을 반환 한 다음 API 호출에서 토큰으로 사용합니다. JWT 또는 OAuth를 검색하여 더 많은 것을 읽고 몇 가지 예를보십시오.
Filip

28

Github에서 토큰을 사용하려고 할 때 동일한 문제가 발생했습니다.

Python 3에서 나를 위해 일한 유일한 구문은 다음과 같습니다.

import requests

myToken = '<token>'
myUrl = '<website>'
head = {'Authorization': 'token {}'.format(myToken)}
response = requests.get(myUrl, headers=head)

여기서 토큰은 무엇입니까? 아니면 인증 토큰을 얻는 방법?
Deep Jadia

8
>>> import requests
>>> response = requests.get('https://website.com/id', headers={'Authorization': 'access_token myToken'})

위의 방법이 작동하지 않으면 다음을 시도하십시오.

>>> import requests
>>> response = requests.get('https://api.buildkite.com/v2/organizations/orgName/pipelines/pipelineName/builds/1230', headers={ 'Authorization': 'Bearer <your_token>' })
>>> print response.json()

1
나는 이번 주에 같은 문제가 있었고 결국 나를 위해 일하게 된 것은 Authorization Bearer 옵션이었습니다. 차이가있는 이유를 잘 모르겠지만 작업을 성공적으로 수행 할 수 있도록 해당 옵션을 제공해 주셔서 감사합니다!
Ryan Harris

@SowmiyaRagu 두 번째 부분은 나를 위해 작동 Bearer <my_token>하지만 첫 번째 부분은 요청이 인증되지 않은 것처럼 응답하기 때문에 작동하지 않습니다.
hydradon

2

uncurl패키지 ( https://github.com/spulec/uncurl ) 를 사용해 보셨습니까 ? 당신은 주사위를 통해 설치할 수 있습니다 pip install uncurl. curl 요청이 반환됩니다.

>>> uncurl "curl --header \"Authorization:access_token myToken\" https://website.com/id"

requests.get("https://website.com/id",
    headers={
        "Authorization": "access_token myToken"
    },
    cookies={},
)

1

약간의 힌트를 추가하겠습니다. 헤더의 키 값으로 전달하는 것은 인증 유형에 따라 달라집니다. 제 경우에는 PRIVATE-TOKEN

header = {'PRIVATE-TOKEN': 'my_token'}
response = requests.get(myUrl, headers=header)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.