【问题标题】:html form submissionhtml表单提交
【发布时间】:2011-03-22 05:49:30
【问题描述】:

我正在查看以下格式的外部网站(不是我自己维护的)的 html 形式:

<form onsubmit="return check(this)" method=post action=address.aspx target=ttPOST>
....
</form>

我希望将数据发布到此外部网站,而无需通过表单并按提交。

我可以简单地转到 url 'address.aspx' 并附加所需的输入参数吗?

我的目标是自动定期发布信息,这些信息是从网站上经常更改的值列表中选择的。 (使用 Python 和 AutoIt)

【问题讨论】:

  • 我需要强调的是,该网站不属于我。

标签: python html automation mechanize


【解决方案1】:

你可以使用 JQuery.post()

<form action="#" class="myForm" method="post">
    <input type="text" id="field1" name="field1" value="" runat="server" />
</form>
// Submit
<div onclick="submit();return false;">Submit</div>

那么submit()函数是这样的

function submit() {
    $.post("address.aspx", $("form.myForm").serialize(), function(data, textStatus)
    {
        // Handle success or error
    });
}

在代码隐藏中,您可以访问帖子变量

Request.Form["field1"]

【讨论】:

    【解决方案2】:

    我应该注意的是,我不清楚您是否想要从网络浏览器外部自动发布数据。其他人已经回答使用脚本等从网页上执行此操作,所以我想我会介绍当您从独立程序执行此操作时它是如何工作的。

    对于大多数语言,您可以获得有助于模拟 Web 请求的东西。其中大多数可能允许您发出发布请求并提供发布数据。我不知道 python 和 autoit 但在一般意义上你只需要通过查看表单的 HTML 来获取名称值对(或者通过检查向服务器发出的请求可能会更好)然后进行发布请求。

    正如其他人所说,如果您只想将值附加到 url,那么服务器将需要乐于接受 GET 请求而不是帖子。有时你会发现服务器会很高兴地做到这一点(它们并不关心表单提交是如何完成的,只要它们获取数据即可),其他时候它会专门寻找帖子并且会忽略作为查询字符串的一部分传递的参数.

    【讨论】:

      【解决方案3】:

      method 属性从POST 更改为GET

      了解差异here

      您可以使用与 GET 参数 (?param1=val1&amp;param2=val2...) 相同的语法更改 URL 以访问外部站点,但要实现这一点,您需要自己在 javascript 中编写此逻辑。

      【讨论】:

        【解决方案4】:

        为什么要绕过表单提交?提交表单并使用 HTTP_POST 中的值。您可以通过将上述html中的方法更改为GET来使用HTTP_GET,但表单仍然会提交。

        将参数提交到address.aspx 的一种方法是使用javascript....构建所有参数的字符串,并在用户单击提交按钮时将其提交到address.aspx。您需要禁用提交按钮的默认行为。

        【讨论】:

          【解决方案5】:

          您可以发出 AJAX GET 请求(将数据附加到 URL)并以一定的时间间隔执行它们。

          我会推荐 jQuery,但它在 .NET 环境中可能并不理想。

          jQuery.ajax() - http://api.jquery.com/jQuery.ajax/
          jQuery.get() - http://api.jquery.com/jQuery.get/

          注意

          我希望将数据发布到此外部网站,而无需通过表单并按提交。

          我认为这意味着您不想实际提交表单,您是否想提交表单但只是不按提交按钮?如果您确实希望表单提交,那么您确实应该将表单的method 属性更改为get 而不是post

          但是,如果您确实希望留在表单页面上,并且需要将数据发布到其他资源,并使用 URL 字符串中的数据(您应该研究这样做的原因和反对者 - scroll down to 9.3 GET ),然后只需发出 AJAX GET 请求,否则只需使用 AJAX 发布数据。无论哪种方式,您都必须进行某种异步调用。

          【讨论】:

          • Jquery 在 .NET 中运行良好。 Intellisense 现在适用于 JQuery 代码!不过,您可能需要使用 Web 服务来使用 ajax。
          【解决方案6】:

          POST 与 GET 不同——如果您将想要的数据附加到 URL,页面将看不到您的变量。也就是说 GETTING (a.k.a going to) http://www.the-other-site.com/address.aspx?variable1=a&amp;variable2=b 将不起作用。

          您需要构建 POST 请求并将其提交给address.aspx

          如果你想自己做,那么你需要 Python 的 urllib2 模块(更具体地说,Request 对象)。如果您想使用预构建的解决方案,则需要 mechanize 之类的东西来发布您的变量。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-02-17
            • 1970-01-01
            • 2016-01-09
            • 2016-12-04
            • 2015-07-09
            • 2014-02-01
            • 2012-02-21
            • 2022-01-21
            相关资源
            最近更新 更多