类似于cu的Python代码

2024-05-28 18:23:33 发布

您现在位置:Python中文网/ 问答频道 /正文

卷曲时我这样做:

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

我怎么能在python中做同样的事情呢?


Tags: comapijsonhttpemailpasswordcurl事情
3条回答

我更愿意在子流程中运行命令行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()

相关问题 更多 >

    热门问题