繁体   English   中英

javascript上的C#httpwebrequest

[英]C# httpwebrequest on javascript

如您所知,您可以使用C#进行POST。 这意味着您可以使用webrequest / response在网站上“按下”按钮。 现在,在使用javascript的网站上也有按钮,它们的开始类似于:

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

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

可以使用webBrowser表单加载页面:

webBrowser.Navigate( url );

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

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

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

我假设您有一个程序想要通过使服务器认为有人按下了POST的按钮,然后发送该POST包含该网页的数据来操纵该网页的服务器“后端”。

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

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

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

一旦您认为拥有它,请尝试使用NetMon来检查您的POST请求和服务器的响应。 继续进行,直到复制了神秘网页的内容为止。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM