底层连接已关闭:连接意外关闭:System.Net.WebException

时间:2013-02-08 11:41:04

标签: c# winforms

我有一个用c#.NET 2.0 Windows应用程序编写的应用程序。我正在尝试使用HttpWebRequest和amp;来实现网络爬虫。 HttpWebResponse。在这个应用程序中我使用http get& amp;发布第三方网站的请求。此网站为其成员提供用户帐户。

我正在尝试使用定位数据登录此网站,然后进入我的个人资料页面&然后尝试制作另一个GETrequest&然后使用发布数据发出另一个POST请求。 但我无法提出成功请求。

通过错误

  

“服务器提交了协议违规.Section = ResponseHeader   Detail =标题名称无效“

然后我在app.config文件中设置<httpWebRequest useUnsafeHeaderParsing="true" />。之后 它抛出错误底层连接已关闭:

  

连接意外关闭:System.Net.WebException。

任何人都可以告诉我显示此错误的原因

我的代码如下。

 request.CookieContainer = objContainer;
        request.KeepAlive = true;

        response = (HttpWebResponse)request.GetResponse();
        dataStream = response.GetResponseStream();
        reader = new StreamReader(dataStream);

        strServerResponse = reader.ReadToEnd();

        reader.Close();
        dataStream.Close();
        response.Close();

        //=======================================================================
        StringBuilder strLinkBuilder = new StringBuilder();

        strLinkBuilder.Append("j_username=username");
        strLinkBuilder.Append("&j_password=password");

        request = (HttpWebRequest)HttpWebRequest.Create(strBaseURL + "j_security_check");

        // Set the Method property of the request to POST.
        request.Method = "POST";

        // Create POST data and convert it to a byte array.
        string postData = strLinkBuilder.ToString();

        byte[] byteArray = Encoding.UTF8.GetBytes(postData);

        // Set the ContentType property of the WebRequest.
        request.ContentType = "application/x-www-form-urlencoded";
        request.KeepAlive = true;


        // Set the ContentLength property of the WebRequest.
        request.ContentLength = byteArray.Length;


        for (int i = 0; i < response.Cookies.Count; i++)
        {
            response.Cookies[i].Path = String.Empty;
        }

        request.CookieContainer = objContainer;
        request.CookieContainer.Add(response.Cookies);


        // Get the request stream.
        dataStream = request.GetRequestStream();
        // Write the data to the request stream.
        dataStream.Write(byteArray, 0, byteArray.Length);

        // Close the Stream object.
        dataStream.Close();

        // Get the response.
        response = (HttpWebResponse)request.GetResponse();

        // Get the stream containing content returned by the server.
        dataStream = response.GetResponseStream();


        // Open the stream using a StreamReader for easy access.
        reader = new StreamReader(dataStream);


        // Read the content.

        strServerResponse = reader.ReadToEnd();

        // Clean up the streams.
        reader.Close();
        dataStream.Close();
        response.Close();              
        //-------------------------------------------------------   

        request = (HttpWebRequest)HttpWebRequest.Create(strBaseURL + "ded/nsdlconsofile.xhtml");

        //request.CookieContainer = objContainer;
        request.KeepAlive = true;
        // request.Method = "POST";

        for (int i = 0; i < response.Cookies.Count; i++)
        {
            response.Cookies[i].Path = String.Empty;
        }

        request.CookieContainer = objContainer;
        request.CookieContainer.Add(response.Cookies);

        response = (HttpWebResponse)request.GetResponse();
        dataStream = response.GetResponseStream();
        reader = new StreamReader(dataStream);

        strServerResponse = reader.ReadToEnd();

        reader.Close();
        dataStream.Close();
        response.Close();
        //-------------------------------------------------------   
        strLinkBuilder = new StringBuilder();

        strLinkBuilder.Append("finYr=2012");
        strLinkBuilder.Append("&qrtr=3");
        strLinkBuilder.Append("&frmType=24Q");
        strLinkBuilder.Append("&download_conso=Go");
        strLinkBuilder.Append("&requestnsdlconsoForm_SUBMIT=1");

        Dictionary<string, string> objNameval = TraceHiddenField(strServerResponse, "");

        foreach (KeyValuePair<string, string> pair in objNameval)
        {
            strLinkBuilder.Append("&" + pair.Key + "=" + pair.Value);

        }


        request = (HttpWebRequest)HttpWebRequest.Create(strBaseURL + "ded/nsdlconsofile.xhtml");

        // Set the Method property of the request to POST.
        request.ContentType = "application/x-www-form-urlencoded";

        request.Method = "POST";
        request.KeepAlive = false;
       // request.ServicePoint.Expect100Continue = false;               
        request.UserAgent = "Mozilla/4.0 (compatible;)";
        request.ProtocolVersion = HttpVersion.Version10;

        // Create POST data and convert it to a byte array.
        postData = strLinkBuilder.ToString();

        byte[] byteData = Encoding.UTF8.GetBytes(postData);

        // Set the ContentType property of the WebRequest.         

        // Set the ContentLength property of the WebRequest.
        request.ContentLength = byteData.Length;


        for (int i = 0; i < response.Cookies.Count; i++)
        {
            response.Cookies[i].Path = String.Empty;
        }

        request.CookieContainer = objContainer;
        request.CookieContainer.Add( response.Cookies);

        // Get the request stream.
        dataStream = request.GetRequestStream();
        // Write the data to the request stream.
        dataStream.Write(byteData, 0, byteData.Length);

        // Close the Stream object.
        dataStream.Close();

        // Get the response.
        response = (HttpWebResponse)request.GetResponse();

        // Get the stream containing content returned by the server.
        dataStream = response.GetResponseStream();

        // Open the stream using a StreamReader for easy access.
        reader = new StreamReader(dataStream);

        strServerResponse = reader.ReadToEnd();

        reader.Close();
        dataStream.Close();
        response.Close();

0 个答案:

没有答案