2010-10-19 22 views
9

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?

+1

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. –

Trả lời

4

"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) 
0

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

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. –

6

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() 
3

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

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