2010-11-23 40 views
0

複数のパラメータを持つURLを使用してカールコールを行いたいとします。私は以下のコードを列挙しました。例えば「curl -d @filter」と同等のオプションはありますか?それともURLエンコードのパラメータがありますか?pycurlを使用して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 
+0

投稿リクエストをしようとしていますか? (あなたは、-dオプションについて言及しています) – cyraxjoe

答えて

3

Pycurlはlibcurlのかなり薄いラッパーです。 libcurlでそれを行うことができれば、pycurlでそれを行うことができます。 (ほとんど)

例えば:

pycurl.setoptはCURLOPT_プレフィックスが除去されたことを除いて、libcurlのに*オプションをCURLOPT_で指定されたlibcurlのに定数をcurl_easy_setoptに相当します。

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

言われていること、curl -dオプションは、HTTP POSTリクエストを送信するためである...ないあなたの例が示すGETスタイル。

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

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

一般的に、形式は:URLの後に「疑問符」、続いて名前=値の組み合わせがアンパサンド記号で結合されます。名前または値に特殊文字が含まれている場合は、それらをパーセントエンコードする必要があります。 urllib.urlopen関数を参照してください、また

>>> 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 
>>> 

だけでurlencode関数を使用します。おそらく、カールする必要はありませんか? (しかし私はあなたのアプリケーションを知らない...)

これは役立ちます。その場合は、マークを付けてお知らせください。 :-)

+0

情報nonot1に感謝しますが、URLに複数のパラメータを含める方法を探しています。私の推測では、私はURLで間違っているが、私はそれを修正する方法はありません。 – calmcajun

+0

@coolcajun更新された回答を見る – nonot1

関連する問題