2010-10-19 11 views
9

कर्ल में की तरह मैं यह नहीं:अजगर कोड कर्ल

curl -u email:password http://api.foursquare.com/v1/venue.json?vid=2393749 

कैसे मैं अजगर में इस एक ही बात कर सकते हैं?

+1

सी [पायथन urllib2 मूल प्रमाणीकरण समस्या ] (http: // stackoverflow .com/प्रश्न/2407126/पायथन-urllib2-basic-auth-problem), जो कि Python पर फोरस्क्वेयर के साथ मूल एथ का उपयोग करने के बारे में है। –

उत्तर

4

"समस्या हो सकती है कि अजगर पुस्तकालयों, HTTP-मानक के अनुसार, पहली बार एक अप्रमाणित अनुरोध, सही साख भेजा जाता है भेजने के लिए, और उसके बाद ही अगर यह एक 401 पुन: प्रयास के साथ जवाब है, तो। Foursquare सर्वर "पूरी तरह से मानक प्रमाणीकरण" ऐसा नहीं तो पुस्तकालयों काम नहीं करेगा करते

हेडर का उपयोग करके प्रमाणीकरण करने की कोशिश करें। "

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) 
012 से taked
0

pycurl उपयोग

वहाँ ट्यूटोरियल

एक विशिष्ट उदाहरण के लिए इतने पर एक चर्चा है:

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

आप 'pycurl' का उपयोग कर सकते हैं, लेकिन इसकी आवश्यकता नहीं है। मानक पुस्तकालय का उपयोग करना काफी संभव है। ऊपर दिए गए प्रश्न को देखें। –

6

यहाँ 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

मैं और अधिक आरामदायक उपप्रक्रिया के माध्यम से कमांड लाइन कर्ल चल रहा हूँ। यह पाइथन, pycurl, और libcurl के सभी संभावित संस्करण मिलान सिरदर्द से बचाता है। यह अवलोकन कि pycurl को 2 वर्षों में छुआ नहीं गया है, और केवल पायथन 2.5 के माध्यम से समर्थित के रूप में सूचीबद्ध है, मुझे सावधान बना दिया। - जॉन

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

अगर उपयोग human_curl आप कुछ कोड

आयात human_curl लिख सकते हैं के रूप में उछालना

r = hurl.get('http://api.foursquare.com/v1/venue.json?vid=2393749', auth=('email','password')) 
r.content में

JSON डेटा