2010-02-13 117 views
1

有些人可能知道,您可以使用C#進行POST。這意味着你可以通過webrequest/response來「推」網站上的按鈕。現在也有上的JavaScript運行的網站按鈕,便開始喜歡:javascript上的C#httpwebrequest

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

有沒有你可以在C#中的函數調用與像HTTPRequests的或任何其他類型圖書館的任何解決方案?

回答

2

我假設你有一個程序希望通過讓服務器認爲某人推送了POSTs按鈕併發送網頁將包含的數據來操縱服務器「後端」的網頁它的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編碼的HTML表單(如名稱)的數據,因此您需要在發佈前對URL進行編碼,並且您需要知道編碼數據的大小對於內容 - 長。 HttpUtility.UrlEncode()是用於此編碼的一種方法。

一旦你認爲有了它,試試它並使用NetMon來檢查你的POST請求和來自服務器的響應。繼續下去,直到你複製了神祕網頁正在做的事情。

+0

謝謝!你的帖子真的幫了我,看看這個程序並測試它。 – Julian 2010-02-13 16:12:55

+0

哦,最後一個問題,當我推一個JavaScript按鈕,它也將提供一個帖子在腳本的最後?所以我可以看到什麼JavaScript的帖子? – Julian 2010-02-13 16:48:16

+0

任何時候,如果您在瀏覽器上做了任何事情都會導致POST進入服務器,那麼數據包追蹤器會記錄它。它如何在瀏覽器代碼中生成並不是那麼有趣。這是什麼被髮送到服務器和服務器發送回來,這是重要的,如果你想在你的程序中重現它。 – 2010-02-14 17:52:33

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提交。

+0

但在上面的例子中,你會看到唯一的javascript(也有一行代碼可以執行此操作),但是如何將上面的值與我自己的值一起插入? – Julian 2010-02-13 15:17:06

+0

上面的例子與JQuery的帖子。你必須深入研究JQuery代碼,看看它發佈了什麼。我相信如果你只是使用Fiddler或Firebug來截獲POST請求本身並查看發佈了什麼數據,它會更容易。 – Stilgar 2010-02-13 15:26:34

0

您需要捕獲這些按鈕發送的請求和標頭,並使用HttpWebRequest來模擬它們。如果您想在網站上自動執行用戶操作,則還可以查看WatiN

+0

有一個快速的樣子,但據我看到我無法看到他如何發佈javascript數據。 – Julian 2010-02-13 15:24:09

+0

它不POST POST JavaScript數據。它模擬按鈕點擊。 – 2010-02-13 15:29:36

2

好使用web瀏覽器的形式加載頁面:

webBrowser.Navigate(url); 

那麼Web broweser形式的內容保存到一個文件或字符串:

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

現在如果你看看TXT文件應該有你要找的html標籤。