programing

인증을 포함한 Python 요청(access_token)

starjava 2023. 8. 25. 23:11
반응형

인증을 포함한 Python 요청(access_token)

파이썬에서 API 쿼리를 사용하려고 합니다.사용할 수 있는 명령줄에서curl이와 같이:

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

이것은 JSON 출력을 제공합니다.myToken는 전체적으로 일정하게 유지되는 16진수 변수입니다.

저는 다른 id를 루프하여 출력을 분석할 수 있도록 python에서 이 전화를 걸고 싶습니다.인증이 필요하기 전에 인증을 수행했습니다.urllib2저는 또한 그것을 살펴보았습니다.requests모듈을 사용하여 인증하는 방법을 알 수 없습니다.

요청 패키지는 HTTP 요청에 매우 적합한 API를 가지고 있으며, 사용자 정의 헤더를 추가하면 다음과 같이 작동합니다(출처: 공식 문서).

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

외부 종속성을 사용하지 않으려면 표준 라이브러리의 urllib2를 사용하는 것과 동일한 것이 다음과 같습니다(소스: 누락된 설명서).

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

Github에서 토큰을 사용하려고 할 때도 같은 문제가 있었습니다.

Python 3에서 작동한 유일한 구문은 다음과 같습니다.

import requests

myToken = '<token>'
myUrl = '<website>'
head = {'Authorization': 'token {}'.format(myToken)}
response = requests.get(myUrl, headers=head)
>>> 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()
import requests

BASE_URL = 'http://localhost:8080/v3/getPlan'
token = "eyJhbGciOiJSUzI1NiIsImtpZCI6ImR"

headers = {'Authorization': "Bearer {}".format(token)}
auth_response = requests.get(BASE_URL, headers=headers)

print(auth_response.json())

출력:

{
"plans": [
    {
        "field": false,
        "description": "plan 12",
        "enabled": true
    }
  ]
}

이미 많은 좋은 답변이 있었지만 아직 이 옵션을 보지 못했습니다.

사용 중인 경우requests사용자 지정 인증 클래스를 지정할 수도 있습니다.HTTPBasicAuth예:

from requests.auth import AuthBase


class TokenAuth(AuthBase):
    def __init__(self, token, auth_scheme='Bearer'):
        self.token = token
        self.auth_scheme = auth_scheme

    def __call__(self, request):
        request.headers['Authorization'] = f'{self.auth_scheme} {self.token}'
        return request

이는 다음과 같이 사용할 수 있습니다(예: 사용자 지정 auth_scheme 사용).

response = requests.get(
    url='https://example.com', 
    auth=TokenAuth(token='abcde', auth_scheme='access_token'),
)

이것은 더 복잡한 설정 방법처럼 보일 수 있습니다.Request.headers속성. 그러나 여러 유형의 인증을 지원하려는 경우에는 유용할 수 있습니다.이를 통해 다음을 사용할 수 있습니다.auth대신에 논쟁headers논쟁.

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

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

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

약간의 힌트를 추가하겠습니다: 헤더의 키 값은 사용자의 권한 유형에 따라 달라지는 것 같습니다. 저의 경우에는 다음과 같습니다.PRIVATE-TOKEN

header = {'PRIVATE-TOKEN': 'my_token'}
response = requests.get(myUrl, headers=header)

python에서 아래를 검색하는 데 사용되는 옵션 중 하나:

import requests

token="abcd" < retrieved based>
headers = {'Authorization': "Bearer {}".format(token)}
response = requests.get(
    'https://<url api>',
    headers=headers,
    verify="root ca certificate"
)

print(response.content)

호스트 이름 불일치 오류가 발생하면 서버에서 호스트 이름으로 추가 SAN을 구성해야 합니다.

이게 도움이 되길 바랍니다.

언급URL : https://stackoverflow.com/questions/13825278/python-request-with-authentication-access-token

반응형