Python을 사용하여 RESTful 서비스에서 JSON 데이터를 얻으려면 어떻게해야합니까?


82

Python을 사용하여 RESTful 서비스에서 JSON 데이터를 가져 오는 표준 방법이 있습니까?

인증을 위해 kerberos를 사용해야합니다.

일부 스 니펫이 도움이 될 것입니다.



2
"Python 기반 REST 프레임 워크"를 찾고있는 것이 아닙니다 . 파이썬에서 일부 Java 서버에서 제공하는 RESTful 서비스를 사용하고 싶습니다. 어쨌든 감사합니다.
Bala

답변:


78

요점을 놓치지 않는 한 이와 같은 것이 작동합니다.

import json
import urllib2
json.load(urllib2.urlopen("url"))

통과하는 데 필요한 자격 증명이 없으면 작동합니다. 하지만이 "urllib2.HTTPError : HTTP Error 401 : Unauthorized"오류가 발생합니다
Bala

어디에서 다운로드하려고합니까?
Trufa

1
Kerberos 인증을 사용해야합니다. 죄송합니다. 질문에 언급하는 것을 잊었습니다.
Bala

@BalamuruganK 어떤 OS를 사용하고 있습니까?
Trufa

저는 유닉스를 사용하고 있습니다. kerberos lib를 사용하여 httpConnection.putheader ( 'Authorization',?)에 전달할 토큰을 얻으려고 시도합니다.
Bala

123

나는 요청 라이브러리에 이것을 시도 할 것입니다. 기본적으로 동일한 작업에 사용할 표준 라이브러리 모듈 (예 : urllib2, httplib2 등) 주위에 래퍼를 사용하는 것이 훨씬 더 쉽습니다. 예를 들어 기본 인증이 필요한 URL에서 json 데이터를 가져 오려면 다음과 같습니다.

import requests

response = requests.get('http://thedataishere.com',
                         auth=('user', 'password'))
data = response.json()

kerberos 인증의 경우 요청 프로젝트 에는 요청 과 함께 사용할 수있는 kerberos 인증 클래스를 제공하는 reqests-kerberos 라이브러리가 있습니다 .

import requests
from requests_kerberos import HTTPKerberosAuth

response = requests.get('http://thedataishere.com',
                         auth=HTTPKerberosAuth())
data = response.json()

5
requests모듈 이 누락 된 경우 다음을 수행하십시오 pip install requests.. 더 많은 정보와 문서는 여기에
benscabbia

여기에 왜 내 json 응답이 키, 값 쌍 전에 u가됩니까? {u'status ': u'FINISHED', u'startTime ': u'2016-11-08T15 : 32 : 33.241Z', u'jobId ': u'f9d71eaa-d439-4a39-a258-54220b14f1b8', u ' context ': u'sql-context', u'duration ': u'0.061 secs'}
KARTHIKEYAN.A

27

기본적으로 서비스에 HTTP 요청을 한 다음 응답 본문을 구문 분석해야합니다. httplib2를 사용하고 싶습니다.

import httplib2 as http
import json

try:
    from urlparse import urlparse
except ImportError:
    from urllib.parse import urlparse

headers = {
    'Accept': 'application/json',
    'Content-Type': 'application/json; charset=UTF-8'
}

uri = 'http://yourservice.com'
path = '/path/to/resource/'

target = urlparse(uri+path)
method = 'GET'
body = ''

h = http.Http()

# If you need authentication some example:
if auth:
    h.add_credentials(auth.user, auth.password)

response, content = h.request(
        target.geturl(),
        method,
        body,
        headers)

# assume that content is a json reply
# parse content with the json module
data = json.loads(content)

10

Python 3을 사용하려면 다음을 사용할 수 있습니다.

import json
import urllib.request
req = urllib.request.Request('url')
with urllib.request.urlopen(req) as response:
    result = json.loads(response.readall().decode('utf-8'))

인증을 위해 kerberos를 어떻게 사용합니까?
Foon

3

무엇보다도 먼저 필요한 것은 urllib2 또는 httplib2입니다. 어쨌든 일반적인 REST 클라이언트가 필요한 경우 이것을 확인하십시오.

https://github.com/scastillo/siesta

그러나 나는 라이브러리의 기능 세트가 아마도 oauth 등을 사용하기 때문에 대부분의 웹 서비스에서 작동하지 않을 것이라고 생각합니다 ... 또한 많은 리디렉션 등을 처리 할 필요가 없다면 httplib2에 비해 여전히 작동해야하는 httplib를 통해 작성되었다는 사실이 마음에 들지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.