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.