谢谢 我不希望再有人回答什么
Response.Redirect
或者是
直接传参了。
B服务器的一个验证码对应一个session这个不是传参问题。是如何去匹配B服务器的session
我查过google,baidu,问过朋友
几乎没人解决。故发帖请教高手
Response.Redirect
或者是
直接传参了。
B服务器的一个验证码对应一个session这个不是传参问题。是如何去匹配B服务器的session
我查过google,baidu,问过朋友
几乎没人解决。故发帖请教高手
Stream outStream = request.GetRequestStream();
outStream.Write(data, 0, data.Length);
outStream.Close();
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream inStream = response.GetResponseStream(); 可以正确登陆,并且返回登陆后B网站的字节流信息。
我做到了。并且获得登陆后的所有信息。
关键是如何登陆并跳转到B网站。
{
if (!IsPostBack)
{
HttpWebRequest request = WebRequest.Create("http://www.b.cn/index.jsp") as HttpWebRequest;
//获取request信息
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//根据request信息获取response
string cookie = response.Headers["Set-Cookie"].Split(';')[0];
//根据response获得相应的cookies
response.Close();
request.Abort();
//关闭两者
//放入session
Session["imgcookie"] = cookie;
this.Image1.ImageUrl = "Default2.aspx";
}
}
protected void Button2_Click(object sender, EventArgs e)
{
HttpWebRequest request = WebRequest.Create("http://www.b.cn/login.jsp") as HttpWebRequest;
request.Method = "POST";
request.Referer = "http://www.b.cn/index.jsp";
request.Headers.Add("Cookie", Session["imgcookie"].ToString());
request.ContentType = "application/x-www-form-urlencoded";
Encoding encoding = Encoding.GetEncoding("gb2312");
string uname = this.TextBox1.Text.Trim();
string pass = this.TextBox2.Text.Trim();
string code = this.TextBox3.Text.Trim(); string postdata = "userid=" + pass + "&userkey=" + uname + "&verifycode=" + code + ""; byte[] data = encoding.GetBytes(postdata);
request.ContentLength = data.Length;
Stream outStream = request.GetRequestStream();
outStream.Write(data, 0, data.Length);
outStream.Close();
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream inStream = response.GetResponseStream(); using (StreamReader reader = new StreamReader(inStream, encoding))
{
string content = reader.ReadToEnd();
// content.Replace("default.jsp", "Default3.aspx"); //content "<meta http-equiv=refresh content=\"3;URL=default.jsp\"><script Language=Javascript>alert('请注意,客户在提交短信的时候请预留3个字作为后缀。安徽会员类短信的统一后缀为【H】');location.href='default.jsp';</script>\r\n<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">\r\n<LINK href=\"../Css/Css.css\" type=text/css rel=stylesheet>\r\n<title> -- 会员登录</title>\r\n</head>\r\n\r\n<body>\r\n\r\n\r\n\r\n</body>\r\n</html>\r\n" string Response.Write(content);
} inStream.Close();
response.Close();
request.Abort();
}
验证码页面: protected void Page_Load(object sender, EventArgs e)
{
string cookie = Session["imgcookie"].ToString(); WebClient _Client = new WebClient();
//建立新的请求
_Client.Headers.Add("Cookie", cookie);
//将新的请求添加cookies头
byte[] _ImageBytes = _Client.DownloadData("http://www.b.cn/GetCode.jsp");
//获取图片字节流
_Client.Dispose();
//释放客户端信息
MemoryStream ns = new MemoryStream(_ImageBytes);
//内存流转换
//Bitmap img = (Bitmap)(Bitmap.FromStream(ns));
System.Drawing.Image image = System.Drawing.Image.FromStream(ns);
Response.BinaryWrite((byte[])_ImageBytes);
//image.Save("c:\\2.jpg");
//Response.BinaryWrite((byte[])_ImageBytes);
//转换为图片
}
验证码本来就是用户手动
关键是用户提交后在B服务器的session,如何和验证码的session匹配的问题
如果可以获取登陆以后的信息,那就可以了啊,后面再获取其它登陆后才能查看的页面信息应该很容易了。
如果是POST到登陆页面以后,返回的是登陆错误,说明代码还有问题。
但是我现在不是要使用StreamReader获得登陆成功后返回的流
而是要直接跳转到登陆后的页面。就是这个问题困扰着俺
这是服务器返回的sessionid
要将这个id应用在所有的有关对B服务器的操作上
如果是使用C#。那么
HttpWebRequest和WebClient
都有
WebClient _Client = new WebClient();
_Client.Headers.Add("Cookie", cookie);
和request.Headers.Add("Cookie", Session["imgcookie"].ToString());
方法
但这样登陆的话获得的是B服务器的数据流。我想要直接跳转到B服务器而不是获得登陆成功的数据流所以被卡住了。我的意思是如何在 跳转的时候加上"ASPSESSIONIDCSTQRADB=PHOLFNOCHJBAIADGHMDIKOKO"
这段服务器分配给我的sessionid。让服务器知道我来自这个会话。而不是重新分配给我一个session
request.Headers.Add("Cookie", Session["imgcookie"].ToString());
www.b.com页面啊
貌似利用这个只能获得登陆后的数据流来着
现在是想让浏览器跳转啊。