簡體   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