0

複数のパラメータを持つURLでcurl呼び出しを行いたい。以下にコードをリストしました。たとえば、「curl -d @filter」と同等のオプションはありますか、それともパラメータをURLエンコードしますか?

SER = foobar
PASS = XXX

STREAM_URL = "http://status.dummy.com/status.json?userId=12&page=1"
class Client:   
          def __init__(self):
        self.buffer = ""
        self.conn = pycurl.Curl()
        self.conn.setopt(pycurl.USERPWD, "%s:%s" % (USER,PASS))
        self.conn.setopt(pycurl.URL, STREAM_URL)
        self.conn.setopt(pycurl.WRITEFUNCTION, self.on_receive)
        self.conn.perform()

    def on_receive(self,data):
        self.buffer += data
4

1 に答える 1

3

Pycurlは、libcurlのかなり薄いラッパーです。libcurlで実行できる場合は、pycurlで実行できます。(多くの場合。)

例えば:

pycurl.setoptは、libcurlのcurl_easy_setoptに対応します。ここで、optionは、CURLOPT_プレフィックスが削除されていることを除いて、libcurlのCURLOPT_*定数で指定されます。

参照: http: //pycurl.sourceforge.net/doc/curlobject.html

そうは言っても、curl -dオプションはHTTPPOSTリクエストを送信するためのものです...あなたの例が示すGETスタイルではありません。

libcurlは、受信するURLがすでにURLエンコードされていることを想定しています。必要に応じて、 http://docs.python.org/library/urllib.htmlを使用してください。

質問のサンプルURLには、すでに2つのパラメーター(userIdとpage)があります。

一般に、形式は次のとおりです。URLの後に「疑問符」が続き、その後にアンパサンド記号で結合された名前=値のペアが続きます。名前または値に特殊文字が含まれている場合は、それらをパーセントエンコードする必要があります。

urlencode関数を使用するだけです。

>>> import urllib
>>> params = [('name1','value1'), ('name2','value2 with spaces & stuff')]
>>> pairs = urllib.urlencode(params)
>>> fullurl = 'http://status.dummy.com/status.json' + '?' + pairs
>>> print fullurl
http://status.dummy.com/status.json?name1=value1&name2=value2+with+spaces+%26+stuff
>>> 

また、urllib.urlopen関数を参照してください。おそらく、カールはまったく必要ありませんか?(しかし、私はあなたのアプリケーションを知りません...)

お役に立てれば。 もしそうなら、答えたマークを付けて私に知らせてください。:-)

于 2010-11-23T03:16:41.227 に答える