我采集一个人才网的个人信息!~我模拟了该网站的登陆,用post形式传回需要的参数,并保存下HttpWebReponse返回的cookie!另一个人才网站用这样的已经成功! 并且讲求该网站的登陆页需要设置头文件的cookie。请高手们分析一下,为什么post回去参数以后,不能登陆成功呢?
解决方案 »
- C#Winform的数据库连接疑问?!
- 如何获取水晶报表中的值
- 我的数据导入表后小数部分没有了?
- C#2005写的程序怎样在没安装2005的机器上使用
- C#中toolbar上面的按钮怎样可以居右排列?散分!
- 我很笨,但是我虚心学习,我要例子,思路也可以,不要空话!
- 我想在程序里用Excel,请问需要在VS添加一个什么选项?小问题,不过挻急的
- C# 读取HTML的时候出错:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- 关于Label数组的应用
- C#调用C++DLL字段类型的问题
- winform中的datagridview控件有行绑定事件吗?
- 》》》》》》》》》》》》》winform嵌入操作excel的问题
CookieContainer containerChinaHr = WebTreatment.GetCookieFromPost(urlChinaHr, Encoding.Default, postData);
string htmlChinaHr = WebTreatment.GetHtmlFromGet("http://ehr.chinahr.com", Encoding.Default, containerChinaHr);
/// 实现登录
/// </summary>
/// <param name="targetURL">请求的路径,必须是实现登录的路径(*)</param>
/// <param name="cc">用于维持cookies Or Session</param>
/// <param name="param">Post提交的信息(用户名,密码)</param>
/// <returns>html page</returns>
public static CookieContainer cc = new CookieContainer();//维持cookie或Session
public static string PostAndGetHTML(string targetURL, Hashtable param)
{
//formData用于保存提交的信息
string formData = "";
foreach (DictionaryEntry de in param)
{
formData += de.Key.ToString() + "=" + de.Value.ToString() + "&";
} if (formData.Length > 0)
formData = formData.Substring(0, formData.Length - 1); //去除最后一个 '&' //把提交的信息转码(post提交必须转码)
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] data = encoding.GetBytes(formData); //开始创建请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetURL);
request.Method = "POST"; //提交方式:post
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.1124)";
request.AllowAutoRedirect = true;
request.KeepAlive = true;
Stream newStream = request.GetRequestStream();
newStream.Write(data, 0, data.Length);//将请求的信息写入request
newStream.Close();
request.CookieContainer = cc; //向服务器发送请求
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); //获得Cookie 保存到Appliction中
string cookieHeader = request.CookieContainer.GetCookieHeader(new Uri("http://login.xiaonei.com/Login.do"));
HttpContext.Current.Application.Lock();
HttpContext.Current.Application["cookieHeader"] = cookieHeader;
HttpContext.Current.Application.UnLock();
return "OK";
} /// <summary>
/// 访问其他页面
/// </summary>
/// <param name="strUrl"></param>
/// <returns></returns>
public static string ReGetHtml(string strUrl)
{
//第二次请求
HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create(strUrl);
string cookhead = HttpContext.Current.Application["cookieHeader"].ToString();
request1.Method = "GET";
request1.Headers.Add("cookie:"+cookhead);
request1.KeepAlive = true;
request1.AllowAutoRedirect = true; HttpWebResponse response1 = (HttpWebResponse)request1.GetResponse();
Stream stream2 = response1.GetResponseStream();//获得回应的数据流
//将数据流转成 String
string result1 = new StreamReader(stream2, System.Text.Encoding.UTF8).ReadToEnd();
return result1;
}
看看你的cookies有没丢失,跨域时,是不是部分cookies丢失了。
除此之外,还有一个referer标头要注意一下。别的都不是问题。