使用pycurl传递url的多个参数

时间:2010-11-23 02:37:51

标签: python curl pycurl

我想使用包含多个参数的网址进行卷曲调用。我已经列出了下面的代码。例如,是否存在“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

1 个答案:

答案 0 :(得分:3)

Pycurl是libcurl的一个非常薄的包装器。如果你可以使用libcurl,你可以使用pycurl。 (晴)

例如:

  

pycurl.setopt对应于libcurl中的curl_easy_setopt,其中选项是使用libcurl中的CURLOPT_ *常量指定的,除了CURLOPT_前缀已被删除。

请参阅:http://pycurl.sourceforge.net/doc/curlobject.html

话虽如此,curl -d选项用于发送HTTP POST请求...而不是您的示例显示的GET样式。

libcurl确实希望它所回收的网址已经过URL编码。如果需要,只需使用http://docs.python.org/library/urllib.html

您问题中的示例网址已有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功能。也许你根本不需要卷曲? (但我不知道你的申请......)

希望这会有所帮助。如果有,请标记已回答并告诉我。 : - )