【问题标题】:Python Online Form SubmisionPython 在线表单提交
【发布时间】:2011-03-14 23:02:13
【问题描述】:

我正在使用 Python 2.7.1 访问在线网站。我需要加载一个 URL,然后向该 URL 提交一个 POST 请求,导致网站重定向到一个新的 URL。然后我想将一些数据发布到新的 URL。这很容易做到,只是相关网站不允许用户使用浏览器导航。 (例如,您不能只输入新页面的 URL 或按返回按钮,您必须通过单击网站上的“下一步”按钮到达那里)。因此,当我尝试这个时:

import urllib, urllib2, cookielib

url = "http://www.example.com/"

jar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
form_data_login = "POSTDATA"
form_data_try = "POSTDATA2"
resp = opener.open(url, form_data_login)
resp2 = opener.open(resp.geturl(), form_data_try)

print resp2.read()

我从 resp2 的网站收到“请勿使用浏览器上的后退按钮”消息。有什么方法可以将数据发布到网站响应给我?提前致谢!

编辑:我会研究 Mechanize,谢谢你的指点。不过,目前有没有办法只用 Python 来做到这一点?

【问题讨论】:

    标签: python forms login


    【解决方案1】:

    你看过mechanize吗?我相信它有你需要的功能。

    【讨论】:

      【解决方案2】:

      您可能通过“下一步”按钮发布内容来访问该页面。您必须查看按下该按钮时发送的 POST 参数,并将所有这些 post 参数添加到您的调用中。

      网站可以设置为只接受特定的 POST 参数,以确保您必须通过网站本身(例如,通过在某种方式或类似的方式),但可能性不大。

      【讨论】:

      • 不过,我使用了 TamperData(一个 Firefox 扩展)来获取 POST 参数。
      • 如果您发送相同的 POST 参数并被拒绝,则该应用程序可能具有某种机制,阻止您轻松发布到该页面。如果没有实际的网站或至少有表格,将很难检查出来。
      • 您还应该检查页面的来源。如果发生 CSRF(跨站点请求伪造),则表单中可能存在隐藏字段,其中包含令牌信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多