我需要通過C#代碼訪問webform。該網頁收到一個組合參數(74741432599; 14/01/1970; 1; 3997),該參數將重定向到另一個網頁,我將在其中搜索某些標籤。POST使用代碼C#沒有得到與瀏覽提交相同的響應
如果我使用簡單的html表單訪問網頁,如下面的代碼,一切正常。
<html>
<body>
<form id="formIntegracaoMatriculaCalouros" name="formIntegracaoMatriculaCalouros" action="http://dsrvwww4/MatriculaCalouros/Seguro/Login.aspx" method="POST">
<input type='hidden' id='CPFeDataNascimento' name='CPFeDataNascimento' value='74741432599;14/01/1970;1;3997' />
<input type="submit" name="enviar" />
</form>
</body>
</html>
下面,使用招,我得到這樣的標題:
但它不可能做手工。所以,我們需要自動執行此訪問,模擬瀏覽器導航。
下面,它的我的C#代碼來模擬訪問:
public static string SendPost(string url, HttpParameters parameters, CookieContainer cookie)
{
string postdata = parameters != null ? parameters.ToString() : string.Empty;
byte[] postBytes = Encoding.ASCII.GetBytes(postdata);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
myRequest.CookieContainer = cookie;
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = postBytes.Length;
Stream sw = myRequest.GetRequestStream();
sw.Write(postBytes, 0, postBytes.Length);
sw.Close();
WebResponse response = myRequest.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string responseString = sr.ReadToEnd();
sr.Close();
return responseString;
}
它做一個POST請求http://dsrvwww4/MatriculaCalouros/Seguro/Login.aspx。 我的參數爲 「74741432599; 14/01/1970; 1; 3997」
這裏是我的小提琴手:
我可以看到,標題是不同的,我不知道這是否是問題。我不知道如何通過代碼製作相同的標題。
目標網頁是一個web窗體,它使用內部的ajax控件工具包,我知道這是一個很大的麻煩....所以,我需要找到一種方法來獲得正確的HTML響應。
以下是我需要通過代碼獲取的目標頁面。
一旦我是這個頁面裏面,我需要做出一些碎屑,得到一些內容,模擬點擊。
但是,我的第一個挑戰是繞過這一步,獲得正確的響應。
任何人都知道我在做什麼錯了?任何提示前進?
好了,我現在提高了我的代碼安達,我用來做後這個方法:
public static string SendPost(string url, HttpParameters parameters, CookieContainer cookie)
{
string postdata = parameters != null ? parameters.ToString() : string.Empty;
byte[] postBytes = Encoding.ASCII.GetBytes(postdata);
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
myRequest.CookieContainer = cookie;
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = postBytes.Length;
myRequest.ProtocolVersion = HttpVersion.Version10;
myRequest.Accept = "image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*";
myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; Touch; .NET4.0C; .NET4.0E; Tablet PC 2.0)";
myRequest.Headers.Add(HttpRequestHeader.Pragma, "no-cache");
myRequest.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
myRequest.Headers.Add(HttpRequestHeader.AcceptLanguage, "pt-BR,pt;q=0.5");
myRequest.Headers.Add(HttpRequestHeader.Cookie, cookie.ToString());
myRequest.KeepAlive = true;
Stream sw = myRequest.GetRequestStream();
sw.Write(postBytes, 0, postBytes.Length);
sw.Close();
WebResponse response = myRequest.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string responseString = sr.ReadToEnd();
sr.Close();
response.Close();
return responseString;
}
而現在,我得到這個標題:
這是現在幾乎相同...除了Cookie值,我不知道如何通過代碼發送它。
低於形式發佈的時候,用的Cookie強調...
當我用一個簡單的形式,我的訪問是小提琴手,我們可以看到下一個頁面(重定向)是「/MatriculaCalouros/Default.aspx」,這是我試圖通過代碼獲取的正確頁面。
但是,對於一些問題是我的帖子的代碼,重定向是不同的......我得到的迴應是從「/ captacao/matricula」頁面,這是一個證明我發送錯誤的帖子.. 。這頁是一些錯誤...
所以,我想知道如果我沒有發送的Cookie是問題或者如果有其他事情發送的代碼。
我嗅到這個練習中出現的邪惡機器人嗎? – ViRuSTriNiTy
'我可以看到標題不同,我不知道這是否是問題。「如果您可以突出顯示您帖子中的不同之處,那麼我們可能會更快地爲您提供幫助。 – mjwills
@mjwills我更新了我的文章...我改進了我的代碼,試圖通過代碼發送相同的POST請求,但我不知道如何發送「Cookie」(請參閱我的文章)。我不知道如果這是我的問題,,,根據一些朋友,我不會解決我的問題,導致目標頁面是一個web表單與ajax控件工具包webcontrols ...是真的嗎? – Olivertech