1

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

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

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

4

4 回答 4

3

我假设您有一个程序想要操纵网页的服务器“后端”,方法是让服务器认为有人按下了一个 POST 按钮,并发送网页将包含在其 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 编码,并且您需要知道Content-Length编码数据的大小。HttpUtility.UrlEncode() 是用于此编码的一种方法。

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

于 2010-02-13T15:32:32.313 回答
2

好的,使用 webBrowser 表单加载页面:

webBrowser.Navigate( url );

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

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

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

于 2012-12-11T15:46:33.563 回答
1

即使在使用 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 提交。

于 2010-02-13T15:13:41.800 回答
0

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

于 2010-02-13T15:14:53.397 回答