【问题标题】:C# httpwebrequest on javascriptjavascript 上的 C# httpwebrequest
【发布时间】:2010-02-13 14:57:41
【问题描述】:

你们中的一些人可能知道,您可以使用 C# 进行 POST。这意味着您可以使用 webrequest/response 在网站上“推送”按钮。现在网站上也有使用 javascript 的按钮,它们的开头如下:

(function($j){
$j.data(document, 'maxPictureSize', 764327);
share_init();
})(jQuery.noConflict());

是否有任何解决方案可以让您在 C# 中使用 httprequests 或任何其他类型的库进行这些函数调用?

【问题讨论】:

    标签: c# javascript httpwebrequest httpwebresponse


    【解决方案1】:

    我假设您有一个程序想要操纵网页的服务器“后端”,方法是让服务器认为有人按下了一个 POST 按钮,并发送网页将包含的数据邮政。

    您需要的第一个工具是Microsoft Network Monitor 3.3,或其他网络数据包跟踪工具。使用它来查看来自真实网页的 POST。 NetMon(至少)将数据包分解为 HTTP 片段和标头,因此您可以轻松查看发生了什么。

    现在您将知道真正的 POST 正在发送哪些数据,以及将数据发送到的 URL(带有任何可能的“查询字符串”——这对于 POST 来说是不常见的)。

    接下来,您需要编写 C# 来为相同的 URL 创建相同类型的 POST。看来你已经知道 HttpWebRequest/HttpWebResponse 了,我就不详细解释了。您可能已经在 NetMon 跟踪中注意到 Content-Type 标头是 application/x-www-form-urlencoded。这通常是来自经过 URL 编码(如名称)的 HTML 表单的数据,因此您需要在 POST 之前对数据进行 URL 编码,并且您需要知道 编码数据的大小 用于 内容长度。 HttpUtility.UrlEncode() 是用于此编码的一种方法。

    一旦你认为你拥有它,试试它并使用 NetMon 检查你的 POST 请求和来自服务器的响应。继续前进,直到你复制了神秘网页正在做的事情。

    【讨论】:

    • 谢谢!你的帖子对我很有帮助,去看看程序并测试一下。
    • 最后一个小问题,当我按下 javascript 按钮时,它也会在脚本末尾提供一个帖子,对吗?所以我可以看到 javascript 发布的内容?
    • 任何时候你在浏览器上做的任何事情都会导致 POST 发送到服务器,数据包跟踪器会记录它。它是如何在浏览器的代码中生成的并不是那么有趣。如果您想在程序中重现它,重要的是发送到服务器的内容和服务器发回的内容。
    【解决方案2】:

    Ok 使用 webBrowser 表单加载页面:

    webBrowser.Navigate( url );
    

    然后将网络浏览器表单的内容保存到文件或字符串中:

    File.WriteAllText(@"c:\test\ajax_test.txt", webBrowser1.Document.Body.Parent.OuterHtml, Encoding.GetEncoding(webBrowser1.Document.Encoding));
    

    现在,如果您查看 txt 文件,它应该包含您要查找的 html 标签。

    【讨论】:

      【解决方案3】:

      即使使用 JavaScript 进行 POST,JS 中的某处也有一个 POST,其工作方式与按钮提交相同。你只需要挖掘到 JS 代码发布的地方,看看它是如何做到的。然后用 C# 编写相同的帖子。

      以ASP.NET自带的__doPostBack函数为例

      var theForm = document.forms['aspnetForm'];
      if (!theForm) {
          theForm = document.aspnetForm;
      }
      function __doPostBack(eventTarget, eventArgument) {
          if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
              theForm.__EVENTTARGET.value = eventTarget;
              theForm.__EVENTARGUMENT.value = eventArgument;
              theForm.submit();
          }
      }
      

      您可以看到它为表单设置了几个输入字段的值并进行了提交。基本上,您需要为输入填写相同的值并提交相同的表单,并且您已经完成了自己的 JS 提交。

      【讨论】:

      • 但在上面的示例中,您会看到唯一的 javascript(尽管还有一行执行此操作)但是我如何在上面插入我自己的值后发布该值?
      • 上面的示例使用 JQuery 发布。您必须深入研究 JQuery 代码才能查看它发布的确切内容。我相信如果你只使用 Fiddler 或 Firebug 来拦截 POST 请求本身并查看发布的数据会更容易。
      【解决方案4】:

      您需要捕获这些按钮正在发送的请求和标头,并使用HttpWebRequest 模拟它们。如果您想在网站上自动执行用户操作,还可以查看 WatiN

      【讨论】:

      • 快速浏览了一下,但据我所知,我看不到他如何发布 javascript 数据。
      • 它不发布 javascript 数据。它模拟按钮点击。
      猜你喜欢
      • 2010-10-05
      • 1970-01-01
      • 2012-10-17
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多