【求助】关于HttpWebRequest相关的一段代码,麻烦帮忙看下

wsgjj220 2013-08-15 11:26:32

    string url = "http://my.b2b.hc360.com/my/turbine/template/corcenter,company,main.html&renew=true";
string param="LoginID=stxszp&password=1qazxsw2&logincode=";

public virtual string HttpPost(string url, string param)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "*/*";
request.Timeout = 15000;
request.AllowAutoRedirect = true;


StreamWriter requestStream = null;
WebResponse response = null;
string responseStr = null;

try
{
requestStream = new StreamWriter(request.GetRequestStream());
requestStream.Write(param);
requestStream.Close();

response = request.GetResponse();
if (response != null)
{
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
responseStr = reader.ReadToEnd();
reader.Close();
}
}
catch (Exception)
{
throw;
}
finally
{
request = null;
requestStream = null;
response = null;
}

return responseStr;
}


这段代码是登陆一个无验证页面的,可是每次返回的结果都还是这个登陆页面的源码。为什么

我想在WINFORM上实现登陆这个网站,保留cookie然后进入另一个信息重发页面提交一个表单
我们公司是做这个网站的服务的,有N多个会员,每天都要挨个登陆重发一下信息,工作量很大。

非常感谢!
...全文
236 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsgjj220 2013-08-16
  • 打赏
  • 举报
回复
引用 4 楼 flyer_ren 的回复:
[quote=引用 3 楼 wsgjj220 的回复:] 我自己模仿他的登陆表单写了个表单在静态页面上 是可以正常登陆的 没有验证码 可是这段代码返回的页面源码显示出来却还是这个登陆页面 而且还多了验证码 这是为什么呢 在返回的数据里我也找不到JSESSIONID
第一,限制了你的IP,会出现验证码。如果不出现验证码,你还返回了登录页源码,把request.AllowAutoRedirect = true;改成false 不要自动跳转,你因你没有处理Cookie问题,自动跳转的话就清空Cookie,又返回首页了[/quote]
public string Login(string postData, string url)
            {
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                    request.Method = "POST";
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.Timeout = 10000;
                    request.ContentLength = Encoding.UTF8.GetByteCount(postData);
                    request.AllowAutoRedirect = false;
                    Stream myRequestStream = request.GetRequestStream();
                    StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
                    myStreamWriter.Write(postData);
                    myStreamWriter.Close();
                    myRequestStream.Close();
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    if (response.StatusCode == HttpStatusCode.Found)
                    {
                        
                        return response.Headers["Set-Cookie"];
                    }
                    else
                    {
                        return "";
                    }
                }
                catch
                {
                    return "";
                }

            }

        private void btnOK_Click(object sender, EventArgs e)
        {
            string postData = "LoginID=stxszp&password=1qazxsw2&logincode=";
            string url = "http://my.b2b.hc360.com/my/turbine/template/corcenter,company,main.html&renew=true";
            string cookie=Login(postData,url);

            url = "http://my.b2b.hc360.com/my/turbine/template/corcenter,business,businpas.html?querysorttag=0";
            postData = "";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Headers.Add("Cookie", cookie);
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.Timeout = 10000;
            request.ContentLength = Encoding.UTF8.GetByteCount(postData);
            request.AllowAutoRedirect = false;
            Stream myRequestStream = request.GetRequestStream();
            StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
            myStreamWriter.Write(postData);
            myStreamWriter.Close();
            myRequestStream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();


            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
            string endStr = reader.ReadToEnd();
            reader.Close();
            
            
            
        }
按你说的做了 是得到JSESSIONID了 可是访问内页的时候还是不成功 AllowAutoRedirect = false的话就返回空值了 麻烦你了 再帮我看下吧 这块真的不懂 非常感谢
wsgjj220 2013-08-16
  • 打赏
  • 举报
回复
引用 7 楼 jshi123 的回复:
用webbrowser简单些
你是没懂我的意思吧 而且就算是用webbrowser 执行点击操作 进入下个页面的时候会弹出新的网页 然后就无法控制了啊。 不知道是不是我不知道 至少我知道的事这样的
jshi123 2013-08-16
  • 打赏
  • 举报
回复
用webbrowser简单些
孤零落叶寒 2013-08-15
  • 打赏
  • 举报
回复

 public  string Login(string _u,string _p)
       {
           try
           {
               
               string postData = "LoginID=stxszp&password=1qazxsw2&logincode=";
               
             
               HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://my.b2b.hc360.com/my/turbine/template/corcenter,company,main.html&renew=true");
               request.Method = "POST";
               request.ContentType = "application/x-www-form-urlencoded";
               request.Timeout = 10000;
               request.ContentLength = Encoding.UTF8.GetByteCount(postData);
               request.AllowAutoRedirect = false;
               Stream myRequestStream = request.GetRequestStream();
               StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
               myStreamWriter.Write(postData);
               myStreamWriter.Close();
               myRequestStream.Close();
               HttpWebResponse response = (HttpWebResponse)request.GetResponse();
               if (response.StatusCode == HttpStatusCode.Found)
                {
                   
                    return response.Headers["Set-Cookie"];
			    }else{
				return "";
				}
           }
           catch {
               return "";
           }
       
       }

在没有验证码情况下登录,登录如果返回不为空,那么你获取JSESSIONID=******; 这段返回的Cookie,以后操作时候在request.Headers.Add("Cookie","JSESSIONID=****;")就可以正常操作了
蝶恋花雨 2013-08-15
  • 打赏
  • 举报
回复
你没保存登陆的cookies CookieContainer http://blog.csdn.net/smeller/article/details/6895065
wsgjj220 2013-08-15
  • 打赏
  • 举报
回复
帮帮忙撒大哥们 我这个真的不会用啊 急死了
wsgjj220 2013-08-15
  • 打赏
  • 举报
回复
引用 1 楼 kongwei521 的回复:
你没保存登陆的cookies CookieContainer http://blog.csdn.net/smeller/article/details/6895065
你这个代码我试了,最终返回的还是登陆页面,也就是没有登陆成功,获取不到Cookie 访问站内其他页面返回的还是登陆页面 而且在浏览器上打开登陆页面是没有验证码的 返回的这个数据在VS里用HTML可视化工具显示出来的时候还多了验证码这一块
孤零落叶寒 2013-08-15
  • 打赏
  • 举报
回复
引用 3 楼 wsgjj220 的回复:
我自己模仿他的登陆表单写了个表单在静态页面上 是可以正常登陆的 没有验证码 可是这段代码返回的页面源码显示出来却还是这个登陆页面 而且还多了验证码 这是为什么呢 在返回的数据里我也找不到JSESSIONID
第一,限制了你的IP,会出现验证码。如果不出现验证码,你还返回了登录页源码,把request.AllowAutoRedirect = true;改成false 不要自动跳转,你因你没有处理Cookie问题,自动跳转的话就清空Cookie,又返回首页了
wsgjj220 2013-08-15
  • 打赏
  • 举报
回复
引用 2 楼 flyer_ren 的回复:

 public  string Login(string _u,string _p)
       {
           try
           {
               
               string postData = "LoginID=stxszp&password=1qazxsw2&logincode=";
               
             
               HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://my.b2b.hc360.com/my/turbine/template/corcenter,company,main.html&renew=true");
               request.Method = "POST";
               request.ContentType = "application/x-www-form-urlencoded";
               request.Timeout = 10000;
               request.ContentLength = Encoding.UTF8.GetByteCount(postData);
               request.AllowAutoRedirect = false;
               Stream myRequestStream = request.GetRequestStream();
               StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
               myStreamWriter.Write(postData);
               myStreamWriter.Close();
               myRequestStream.Close();
               HttpWebResponse response = (HttpWebResponse)request.GetResponse();
               if (response.StatusCode == HttpStatusCode.Found)
                {
                   
                    return response.Headers["Set-Cookie"];
			    }else{
				return "";
				}
           }
           catch {
               return "";
           }
       
       }

在没有验证码情况下登录,登录如果返回不为空,那么你获取JSESSIONID=******; 这段返回的Cookie,以后操作时候在request.Headers.Add("Cookie","JSESSIONID=****;")就可以正常操作了
我自己模仿他的登陆表单写了个表单在静态页面上 是可以正常登陆的 没有验证码 可是这段代码返回的页面源码显示出来却还是这个登陆页面 而且还多了验证码 这是为什么呢 在返回的数据里我也找不到JSESSIONID

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧