我需要通过C#代码访问webform。该网页收到一个组合参数(74741432599; 14/01/1970; 1; 3997),重定向到另一个网页,我将在那里搜索一些标签。
如果我使用简单的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>
下面,使用fiddler,我得到这个标题:
但不可能手动完成。因此,我们需要自动化此访问,模拟浏览器导航。
下面是我的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;
}
它向http://dsrvwww4/MatriculaCalouros/Seguro/Login.aspx发出POST请求。 我的参数是“74741432599; 14/01/1970; 1; 3997”
这是我的小提琴手:
我可以看到Header是不同的,我不知道这是不是问题。我不知道如何通过代码制作相同的标题。
目标网页是一个webform,它在内部使用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;
}
现在,我得到了这个标题:
现在几乎一样......除了Cookies值,我不知道如何通过代码发送它。
下面是按表单发布时的提琴手,Cookie突出显示......
当我使用简单表单进行访问时,我们可以看到下一页(重定向)是“/MatriculaCalouros/Default.aspx”,这是我试图通过代码获取的正确页面。
但是,由于某些问题是我的帖子代码,重定向是不同的...我得到的响应来自“/ captacao / matricula”页面,这证明我发错了帖子...这个页面是某种错误...
所以,我想知道我发送的Cookie是不是问题,还是代码还有其他东西需要发送。
答案 0 :(得分:1)
要使代码中的标题使用HttpWebRequest.Headers集合,请在其中添加标题。
答案 1 :(得分:0)
我最好的客户是从服务器端代码调用静态方法,因为HTML表单不使用服务器端ASP.NET用户控件。尝试添加runat =&#34; server&#34;对你的控件,然后尝试发布并观察标题出现的差异。