【问题标题】:pycurl, how to send POST data for Multiple Select Form?pycurl,如何为多选表单发送 POST 数据?
【发布时间】:2013-08-29 15:10:38
【问题描述】:

我正在尝试做一些网页抓取,它涉及发送一个带有多选框列表的表单,看起来类似于:

<select name="multipleSelectForm" multiple="multiple" size="5">
    <option value="value1">value1</option>
    <option value="value2">value2</option>
</select>

现在,我想使用 pycurl 同时发送 value1 和 value2,例如:

import urllib
import pycurl

c = pycurl.Curl()

data = {'multipleSelectForm':'value1',
        'multipleSelectForm':'value2'}

c.setopt(c.URL, 'http://www.example.com')

c.setopt(c.POST, 1)
post = urllib.urlencode(data)
c.setopt(c.POSTFIELDS, post)

c.perform()

现在明显的问题是它多次发送 multipleSelectForm。我很确定请求的页面可能正在寻找一个 multipleSelectForm 数组,而不仅仅是单个变量(这只是一个猜测,我实际上并不确定),因此它收到的 POST 数据不正确。

我尝试使用谷歌浏览器的开发工具来查看它的流量,当我查看表单数据时,它看起来像这样:

multipleSelectForm:value1
multipleSelectForm:value2

如果有人愿意提供帮助,我对如何处理这一切有点迷茫

【问题讨论】:

    标签: python curl web-scraping libcurl pycurl


    【解决方案1】:

    看起来你发送的数据只是

    { 'multipleSelectForm':'value2' }
    

    因为它是一本字典。如果您将其设置为元组对,它将执行您想要的操作。

    data = (('multipleSelectForm', 'value1'), ('multipleSelectForm', 'value2'))
    

    您可以通过设置一个小型调试 http 服务器自行测试:

    from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer                                                                                                                                                                                                                     
    
    class hand(BaseHTTPRequestHandler):                                          
        def __init__(self, socket, *args):                                       
            print socket.recv(10000)                                             
    
    server = HTTPServer(('', 8080), hand)                                        
    server.serve_forever()                                                       
    

    然后用你的脚本点击它。我用它来确认传递元组列表符合我的预期。

    【讨论】:

      猜你喜欢
      • 2019-10-25
      • 2019-07-28
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      相关资源
      最近更新 更多