我想從公司網站收集特定事件的數據:http://pipeline.kindermorgan.com/infoposting/notices.aspx?type=CRIT 我曾經工作過很多類似的網站,但到目前爲止他們一直非常簡單,它只是一個訪問網站和使用響應流的問題。在這種情況下,網站要求您從第一個組合框(TSP/TSP名稱)中選擇一個值。如果沒有任何信息被傳遞,URL將返回與列表中第一個項目關聯的數據。我真的需要能夠獲取與列表中的任何項目相關的數據。WebRequest/POST關於從網站提取特定數據的問題
這是我一直使用至今的代碼,但它無法與服務器錯誤500,所以我猜測,要麼我沒有正確形成POST或者是缺少在後數據中的某些數據):
對於我上面列出的頁面,我只想從組合框(從Trailblazer開始)獲得特定TSP通知表的響應流。我知道控件是「ctl00 $ ContentPlaceHolder1 $ ddlpipeline」,我想發送的值是24.當我通過IE瀏覽時,我還必須按下「恢復」按鈕。
當我使用FireBug查看POST請求時,我注意到有很多其他目標/值包括在內。我不確定是否需要發送所有這些以及(以前從未做過POST),但我不確定如何格式化POST中的數據來完成此操作。
如果這個請求看起來很奇怪,請和我聯繫。我更像是一個數據庫人員,並且希望自動化我們每天需要手動查看的許多東西。任何幫助將不勝感激!
var encoding = new ASCIIEncoding();
var postData = "ctl00$ContentPlaceHolder1$ddlpipeline=24";
byte[] data = encoding.GetBytes(postData);
string RemoteURI = "http://pipeline.kindermorgan.com/infoposting/notices.aspx?type=CRIT";
var myRequest = (HttpWebRequest)WebRequest.Create(RemoteURI);
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = data.Length;
var newStream = myRequest.GetRequestStream();
newStream.Write(data, 0, data.Length);
newStream.Close();
var response = myRequest.GetResponse();
var responseStream = response.GetResponseStream();
var responseReader = new StreamReader(responseStream);
我還沒有仔細看過這個 - 但是在很高的層面上,如果瀏覽器成功發佈數據並獲取所需的響應,那麼您還應該在代碼中發送相同的請求。這會增加你成功的機會。 – feroze 2011-03-17 18:25:53
謝謝feroze。我最終確信,我在代碼中構建的POST數據與我在使用FireBug時看到的完全一樣,但仍然無效。然後在神聖的干預時刻,我想起了以前的努力,需要爲請求設置用戶代理。我做到了這一點,瞧,它像一個冠軍。這裏是我添加的代碼(爲了其他人的利益): myRequest.UserAgent =「Mozilla/4.0(compatible; MSIE 7.0; Windows NT 5.1)」; – 2011-03-19 00:56:04