卷曲我这样做:
curl -u email:password http://api.foursquare.com/v1/venue.json?vid=2393749
我如何在python中做同样的事情?
答案 0 :(得分: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()
答案 1 :(得分:4)
“问题可能是,根据HTTP-Standard,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)
答案 2 :(得分:3)
通过子进程运行命令行curl更加舒服。这避免了python,pycurl和libcurl的所有潜在的版本匹配问题。 pycurl在2年内没有被触及的观察结果,仅被列为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')
答案 3 :(得分:1)
如果使用human_curl,你可以编写一些代码
将human_curl导入为投掷
r = hurl.get('http://api.foursquare.com/v1/venue.json?vid=2393749', auth=('email','password'))
r.content中的Json数据
答案 4 :(得分:0)
使用pycurl
有关SO的讨论
一个典型的例子:
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