Có cách tiêu chuẩn nào để lấy dữ liệu JSON từ dịch vụ RESTful bằng Python không?
Tôi cần sử dụng kerberos để xác thực.
một số đoạn mã sẽ hữu ích.
Có cách tiêu chuẩn nào để lấy dữ liệu JSON từ dịch vụ RESTful bằng Python không?
Tôi cần sử dụng kerberos để xác thực.
một số đoạn mã sẽ hữu ích.
Câu trả lời:
Một cái gì đó như thế này sẽ hoạt động trừ khi tôi thiếu điểm:
import json
import urllib2
json.load(urllib2.urlopen("url"))
Tôi sẽ thử thư viện yêu cầu cho việc này. Về cơ bản chỉ là một trình bao bọc dễ sử dụng hơn nhiều xung quanh các mô-đun thư viện tiêu chuẩn (tức là urllib2, httplib2, v.v.) mà bạn sẽ sử dụng cho cùng một thứ. Ví dụ: để tìm nạp dữ liệu json từ một url yêu cầu xác thực cơ bản sẽ giống như sau:
import requests
response = requests.get('http://thedataishere.com',
auth=('user', 'password'))
data = response.json()
Để xác thực kerberos, dự án yêu cầu có thư viện reqests-kerberos cung cấp lớp xác thực kerberos mà bạn có thể sử dụng với các yêu cầu :
import requests
from requests_kerberos import HTTPKerberosAuth
response = requests.get('http://thedataishere.com',
auth=HTTPKerberosAuth())
data = response.json()
requests
mô-đun, bạn chỉ cần làm: pip install requests
. Thêm thông tin và tài liệu tại đây
Về cơ bản, bạn cần thực hiện một yêu cầu HTTP tới dịch vụ, sau đó phân tích cú pháp phần thân 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)
Nếu bạn 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'))
Trước hết, tôi nghĩ rằng đư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 ứng dụng khách REST chung, hãy kiểm tra điều này.
https://github.com/scastillo/siesta
Tuy nhiên, tôi nghĩ rằng bộ tính năng của thư viện sẽ không hoạt động đối với hầu hết các dịch vụ web vì chúng có thể sẽ sử dụng oauth, v.v. Ngoài ra, tôi không thích thực tế là nó được viết trên httplib, điều này gây khó khăn so với httplib2 vẫn sẽ hoạt động cho bạn nếu bạn không phải xử lý nhiều chuyển hướng, v.v.