2024-05-28 18:23:33 发布
网友
卷曲时我这样做:
curl -u email:password http://api.foursquare.com/v1/venue.json?vid=2393749
我怎么能在python中做同样的事情呢?
我更愿意在子流程中运行命令行curl。这避免了python、pycurl和libcurl所有可能的版本匹配问题。观察到pycurl已经两年没有被接触过了,而且只在Python 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')
“问题可能是,按照HTTP标准,Python库首先发送一个未经验证的请求,然后只有在用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)
这里是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()
我更愿意在子流程中运行命令行curl。这避免了python、pycurl和libcurl所有可能的版本匹配问题。观察到pycurl已经两年没有被接触过了,而且只在Python 2.5中被列为支持,这让我很警惕。 --约翰
“问题可能是,按照HTTP标准,Python库首先发送一个未经验证的请求,然后只有在用401重试应答时,才能发送正确的凭据。如果Foursquare服务器不执行“完全标准的身份验证”,那么库就无法工作。
尝试使用邮件头进行身份验证:“
取自Python urllib2 Basic Auth Problem
这里是pycurl中的等价物:
相关问题 更多 >
编程相关推荐