关于C#用post方式请求asp.net服务器返回异常问题
public string getHtml()
{
string _url = "http://www.qdnggzy.cn/qdnztb/jyxx/056002/056002001/MoreInfo.aspx?CategoryNum=056002001";
HtmlWeb htmlWeb = new HtmlWeb();
HtmlAgilityPack.HtmlDocument htmlDoc = htmlWeb.Load(_url);
HtmlNode htmlNode = htmlDoc.DocumentNode.SelectSingleNode("//input[@id='__VIEWSTATE']");
string viewStateValue = htmlNode.Attributes["value"].Value;
StringBuilder sb = new StringBuilder();
CookieContainer cookieContainer = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_url);
request.Method = "GET";
request.CookieContainer = cookieContainer;
using (WebResponse response = request.GetResponse())
{
using (StreamReader reader = new StreamReader(response.GetResponseStream(),Encoding.GetEncoding("gb2312")))
{
reader.ReadToEnd();
}
CookieCollection cookies = cookieContainer.GetCookies(new Uri(_url));
if (cookies != null)
{
foreach (System.Net.Cookie cookie in cookies)
sb.AppendLine(cookie.ToString());
}
string tbViewState =viewStateValue;
string postdt = "__VIEWSTATE=" + tbViewState + "&__EVENTTARGET=MoreInfoList1$Pager&__EVENTARGUMENT=2";
string finalHtml = readPostData(_url, postdt, cookies, "");
return finalHtml;
}
=====post方法=====
public static string readPostData(string Url, string postDataStr, CookieCollection cookies,string referer)
{
HttpWebRequest request = null;
if (Url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(Url) as HttpWebRequest;
//创建证书文件
System.Security.Cryptography.X509Certificates.X509Certificate objx509 = new System.Security.Cryptography.X509Certificates.X509Certificate(Application.StartupPath + @"\\licensefile\zjs.cer");
//添加到请求里
request.ClientCertificates.Add(objx509);
request.ProtocolVersion = HttpVersion.Version10;
}
else
{
request = (HttpWebRequest)WebRequest.Create(Url);
}
//随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空
if (cookies != null)
{
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
}
if (!string.IsNullOrEmpty(referer))
{
request.Referer = referer;
}
//postDataStr = System.Web.HttpUtility.UrlEncode(postDataStr);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
//byte[] data = encoding.GetBytes(postData);
request.ContentLength = postDataStr.Length;
Stream myRequestStream = request.GetRequestStream();
StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
// myStreamWriter.Write(data,0,data.Length);
myStreamWriter.Write(postDataStr);
myStreamWriter.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("gb2312"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
//测试一下如果是Unicode则直接转换成文字
retString = UnicodeToString(retString);
return retString;
}
网址:http://www.qdnggzy.cn/qdnztb/jyxx/056002/056002001/MoreInfo.aspx?CategoryNum=056002001
要求:用程序动态获取各个页面的信息(比如,第二页,第三页……)
我已经试了很多次,cookie,post数据都带上了啊,就是post不成功,请大侠们帮忙看看是咋回事。。愿意奉上仅有的70分