trong curl tôi làm điều này:Python mã như curl
curl -u email:password http://api.foursquare.com/v1/venue.json?vid=2393749
Làm thế nào tôi có thể làm điều này cùng trong python?
trong curl tôi làm điều này:Python mã như curl
curl -u email:password http://api.foursquare.com/v1/venue.json?vid=2393749
Làm thế nào tôi có thể làm điều này cùng trong python?
"Vấn đề có thể là các thư viện Python, mỗi HTTP-Standard, đầu tiên gửi một yêu cầu không được thẩm định, và sau đó chỉ nếu nó trả lời với một retry 401, được các chứng chỉ đúng gửi Nếu. các máy chủ Foursquare không làm "xác thực hoàn toàn tiêu chuẩn", sau đó các thư viện sẽ không làm việc
Hãy thử sử dụng tiêu đề để làm xác thực:."
taked từ Python urllib2 Basic Auth Problem
import urllib2
import base64
req = urllib2.Request('http://api.foursquare.com/v1/venue.json?vid=%s' % self.venue_id)
req.add_header('Authorization: Basic ',base64.b64encode('email:password'))
res = urllib2.urlopen(req)
Sử dụng pycurl
Có một cuộc thảo luận về SO cho hướng dẫn
Một ví dụ điển hình:
import sys
import pycurl
class ContentCallback:
def __init__(self):
self.contents = ''
def content_callback(self, buf):
self.contents = self.contents + buf
t = ContentCallback()
curlObj = pycurl.Curl()
curlObj.setopt(curlObj.URL, 'http://www.google.com')
curlObj.setopt(curlObj.WRITEFUNCTION, t.content_callback)
curlObj.perform()
curlObj.close()
print t.contents
Bạn có thể sử dụng 'pycurl', nhưng không bắt buộc. Bạn hoàn toàn có thể sử dụng thư viện chuẩn. Xem câu hỏi tôi đã liên kết ở trên. –
Dưới đây là tương đương trong pycurl:
import pycurl
from StringIO import StringIO
response_buffer = StringIO()
curl = pycurl.Curl()
curl.setopt(curl.URL, "http://api.foursquare.com/v1/venue.json?vid=2393749")
curl.setopt(curl.USERPWD, '%s:%s' % ('youruser', 'yourpassword'))
curl.setopt(curl.WRITEFUNCTION, response_buffer.write)
curl.perform()
curl.close()
response_value = response_buffer.getvalue()
Tôi cảm thấy thoải mái hơn chạy curl dòng lệnh thông qua tiến trình con. Điều này tránh tất cả các phiên bản tiềm năng phù hợp với nhức đầu của python, pycurl và libcurl. Quan sát cho thấy pycurl chưa được xúc động trong 2 năm, và chỉ được liệt kê như là giả sử thông qua Python 2.5, khiến tôi cảnh giác. - John
import subprocess
def curl(*args):
curl_path = '/usr/bin/curl'
curl_list = [curl_path]
for arg in args:
curl_list.append(arg)
curl_result = subprocess.Popen(
curl_list,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE).communicate()[0]
return curl_result
answer = curl('-u', 'email:password', 'http://api.foursquare.com/v1/venue.json?vid=2393749')
nếu sử dụng human_curl bạn có thể viết một số mã
nhập khẩu human_curl như ném
r = hurl.get('http://api.foursquare.com/v1/venue.json?vid=2393749', auth=('email','password'))
dữ liệu JSON trong r.content
Xem [Python urllib2 Basic Auth Vấn đề ] (http: // stackoverflow .com/questions/2407126/python-urllib2-basic-auth-problem), đó là về việc sử dụng Basic Auth với Foursquare trên Python. –