【问题标题】:passing multiple parameters for the url using pycurl使用 pycurl 为 url 传递多个参数
【发布时间】:2010-11-23 02:37:51
【问题描述】:

我想使用包含多个参数的 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

【问题讨论】:

  • 您是否正在尝试发布请求? (你提到了 -d 选项)

标签: python curl pycurl


【解决方案1】:

Pycurl 是一个非常薄的 libcurl 包装器。如果你可以用 libcurl 来做,你可以用 pycurl 来做。 (大部分。)

例如:

pycurl.setopt 对应 libcurl 中的 curl_easy_setopt,其中 option 用 libcurl 中的 CURLOPT_* 常量指定,只是去掉了 CURLOPT_ 前缀。

见:http://pycurl.sourceforge.net/doc/curlobject.html

话虽如此,curl -d 选项用于发送 HTTP POST 请求...而不是您的示例显示的 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 函数。也许您根本不需要 curl? (但我不知道你的申请...)

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

【讨论】:

  • 感谢 nonot1 的信息,但我正在寻找一种在 URL 中包含多个参数的方法。我的猜测是我在 URL 中做错了,但我不知道如何修复它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 2021-09-12
  • 2021-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
相关资源
最近更新 更多