Pythonを使用してRESTfulサービスからJSONデータを取得するにはどうすればよいですか?


82

Pythonを使用してRESTfulサービスからJSONデータを取得する標準的な方法はありますか?

認証にKerberosを使用する必要があります。

いくつかのスニペットが役立ちます。



2
私は「PythonベースのRESTフレームワーク」探していません。一部のJavaサーバーが提供するRESTfulサービスをPythonで使用したいと思います。とにかくありがとう。
バラ2011年

回答:


78

私が要点を見逃していない限り、このようなものは機能するはずです:

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

これは、合格するために必要な資格情報がない場合に機能します。しかし、この「urllib2.HTTPError:HTTP Error 401:Unauthorized」エラーが発生します
Bala

どこからダウンロードしようとしていますか?
Trufa 2011年

1
Kerberos認証を使用する必要があります。申し訳ありませんが、問題について言及するのを忘れました。
バラ2011年

@BalamuruganKどのOSを使用していますか?
Trufa 2011年

UNIXを使用しています。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認証の場合、リクエストプロジェクトにはreqests-kerberosライブラリがあり、リクエストで使用できる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 2016

ここで、なぜ私の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 2016年

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 2015

3

まず第一に、これに対する独自のソリューションを展開するために必要なのはurllib2またはhttplib2だけだと思います。とにかく、汎用のRESTクライアントが必要な場合は、これを確認してください。

https://github.com/scastillo/siesta

ただし、ライブラリの機能セットは、おそらくoauthなどを使用するため、ほとんどのWebサービスでは機能しないと思います。また、httplib2に比べて面倒なhttplibで書かれているという事実は、多くのリダイレクトなどを処理する必要がない場合でも機能するはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.