最近在做爬虫程序,在post提交模拟登录时遇到了些问题,一些网站是正常的,但有些怎么测试也是出错,希望高手能帮忙看一下,谢谢。
代码如下:是登录百度贴吧
 

Code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Collections;
using System.Collections.Specialized;

namespace TestHttp


{
    public partial class frmBaiduTB : Form

    
{
        const string C_LoginUrl = "https://passport.baidu.com/?login";
        CookieContainer m_cc = new CookieContainer();

        public frmBaiduTB()

        
{
            InitializeComponent();
        }

        private void btnLogin_Click(object sender, EventArgs e)

        
{
            HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(C_LoginUrl);
            httpReq.Method = "POST";
            httpReq.CookieContainer = m_cc;
            httpReq.Accept = "*/*";
            httpReq.Referer = "http://passport.baidu.com/?login";
            httpReq.ContentType = "application/x-www-form-urlencoded";
            httpReq.AllowAutoRedirect = false;

            httpReq.Headers.Add("Accept-Encoding", "gzip, deflate");
            httpReq.Headers.Add("Accept-Language", "zh-cn");
            httpReq.Headers.Add("Cache-Control", "no-cache");            
            httpReq.Headers.Add("UA-CPU", "x86");            
            httpReq.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.2)";

            string strPostData = GetPostData();
            byte[] bsInData = Encoding.GetEncoding("utf-8").GetBytes(strPostData);
            httpReq.ContentLength = bsInData.Length;

            Stream inputStream = httpReq.GetRequestStream();
            inputStream.Write(bsInData, 0, bsInData.Length);
            inputStream.Close();
            inputStream.Dispose();

            HttpWebResponse httpRes = null;

            try

            
{
                //此处总是出现错误,{"基础连接已经关闭: 连接被意外关闭。"}System.Exception {System.Net.WebException}
                //这是怎么回事啊?
                httpRes = (HttpWebResponse)httpReq.GetResponse();
            }
            catch (WebException ex)

            
{
                httpRes = (HttpWebResponse)ex.Response;
                MessageBox.Show( ex.Message );
                return;
            }

            Stream outStream = httpRes.GetResponseStream();
            StreamReader sr = new StreamReader(outStream);

            MessageBox.Show(sr.ReadToEnd());
            sr.Close();

            string strLocation = "";
            string strCookie = "";

            if (httpRes.StatusCode == HttpStatusCode.Redirect)

            
{
                strLocation = httpRes.Headers["Location"];
                strCookie = httpRes.Headers.Get("Set-Cookie");
            }           
        }

        private string GetPostData()

        
{
            string strRtn = "";

            NameValueCollection nvc = new NameValueCollection();           
            nvc.Add("aid","");
            nvc.Add("more_param","");
            nvc.Add("need_coin","");
            nvc.Add("need_pay","");
            nvc.Add("next_target","");
            nvc.Add("password", txtPwd.Text);
            nvc.Add("pay_method","");
            nvc.Add("psp_tt","0");
            nvc.Add("return_method","get");
            nvc.Add("return_type","");
            nvc.Add("safeflg","0");
            nvc.Add("skip_ok","");
            nvc.Add("tpl","tb");
            nvc.Add("tpl_ok","");
            nvc.Add("u","http://tieba.baidu.com/");
            nvc.Add("username", txtUserName.Text);
            nvc.Add("verifycode","");

            foreach (string ie in nvc)

            
{
                strRtn += ie + "=" + nvc[ie] + "&";
            }
            if (strRtn.EndsWith("&"))
                strRtn = strRtn.Substring(0, strRtn.Length - 1);
            return strRtn; ;
        }
    }
}
