9

カールで私はこれを行います:

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

Pythonでこれと同じことをどのように行うことができますか?

4

5 に答える 5

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()
于 2010-10-19T22:18:59.990 に答える
4

「問題は、HTTP-Standardに従って、Pythonライブラリが最初に認証されていないリクエストを送信し、次に401の再試行で応答された場合にのみ、正しいクレデンシャルが送信されることです。Foursquareサーバーが「完全に標準的な認証を行わない場合」 「そうすると、ライブラリは機能しなくなります。

ヘッダーを使用して認証を行ってみてください:」

Pythonurllib2基本認証問題から取得

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)
于 2010-11-04T13:26:26.883 に答える
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')
于 2010-10-23T14:14:49.573 に答える
1

human_curlを使用すると、コードを記述できます

human_curlをhurlとしてインポートします

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

r.contentのJsonデータ

于 2012-04-14T09:24:08.457 に答える
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
于 2010-10-19T22:15:54.183 に答える