2011-10-13 54 views
63

Có cách nào tiêu chuẩn để nhận dữ liệu JSON từ dịch vụ RESTful bằng Python không?Làm cách nào để nhận dữ liệu JSON từ dịch vụ RESTful bằng Python?

Tôi cần sử dụng các kerberos để xác thực.

một số đoạn mã sẽ hữu ích.

+0

này có thể giúp bạn http://stackoverflow.com/questions/ 713847/recommendations-of-python-phần còn lại-web-dịch vụ-khung –

+1

Tôi không tìm kiếm fro "Python - ** dựa ** khung REST". Tôi muốn sử dụng dịch vụ RESTful được cung cấp bởi một số máy chủ java trong python. Dù sao cũng cảm ơn bạn. – Bala

Trả lời

67

Something như thế này nên làm việc trừ khi tôi đang bị mất điểm:

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

điều này sẽ hoạt động nếu không có thông tin xác thực cần thiết để vượt qua. Nhưng tôi nhận được lỗi "urllib2.HTTPError: Lỗi HTTP 401: Không hợp lệ" này – Bala

+0

Bạn đang cố gắng tải xuống từ đâu? – Trufa

+1

Tôi cần sử dụng xác thực Kerberos. Xin lỗi, tôi quên đề cập đến trong câu hỏi. – Bala

3

Trước tiên, tôi nghĩ rằng sẽ đưa ra giải pháp của riêng bạn cho tất cả những gì bạn cần là urllib2 hoặc httplib2. Dù sao trong trường hợp bạn yêu cầu một máy khách REST chung kiểm tra điều này.

https://github.com/scastillo/siesta

Tuy nhiên tôi nghĩ rằng các bộ tính năng của thư viện sẽ không làm việc cho hầu hết các dịch vụ web bởi vì họ có thể sẽ sử dụng oauth vv ... Ngoài ra tôi không thích thực tế là nó được viết trên httplib đó là một nỗi đau so với httplib2 vẫn sẽ làm việc cho bạn nếu bạn không phải xử lý rất nhiều chuyển hướng vv ..

98

Tôi sẽ cung cấp cho các requests thư viện để thử cho việc này. Về cơ bản, việc sử dụng trình bao bọc xung quanh các mô-đun thư viện chuẩn dễ dàng hơn nhiều (ví dụ: urllib2, httplib2, v.v.) bạn sẽ sử dụng cho cùng một điều. Ví dụ, để lấy dữ liệu json từ một url yêu cầu xác thực cơ bản sẽ trông như thế này:

import requests 

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

cho xác thực Kerberos các requests project có thư viện reqests-kerberos mà cung cấp một lớp xác thực Kerberos mà bạn có thể sử dụng với requests:

import requests 
from requests_kerberos import HTTPKerberosAuth 

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

Nếu bạn thiếu mô-đun 'yêu cầu', chỉ cần thực hiện:' pip install requests'. Thông tin và tài liệu khác [ở đây] (http://docs.python-requests.org/en/latest/user/install/) – gudthing

+0

tại sao câu trả lời json của tôi trở thành với u trước cặp khóa, giá trị? * {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 '} * –

23

Về cơ bản, bạn cần thực hiện yêu cầu HTTP cho dịch vụ và sau đó phân tích cú pháp nội dung của phản hồi. Tôi thích sử dụng httplib2 cho nó:

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) 
+1

Cảm ơn tác vụ này –

7

Nếu bạn mong muốn sử dụng Python 3, bạn có thể sử dụng như sau:

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')) 
+0

Làm cách nào để sử dụng kerberos này để xác thực? – Foon

Các vấn đề liên quan