2

私は c#.NET 2.0 Windows アプリで書かれたアプリケーションを持っています。HttpWebRequest と HttpWebResponse を使用して Web クローラーを実装しようとしています。このアプリケーションでは、サード パーティの Web サイトに対して http get および post 要求の両方を使用しています。この Web サイトは、そのメンバーにユーザー アカウントを提供します。

ポスティング データを使用してこのサイトにログインし、プロファイル ページに入力してから、別の GETrequest を作成してから、投稿データを使用して別の POST リクエストを作成しようとしています。しかし、リクエストを成功させることができません。

それをエラーで

「サーバーがプロトコル違反を犯しました。セクション=ResponseHeader Detail=ヘッダー名が無効です」

次に<httpWebRequest useUnsafeHeaderParsing="true" />、app.config ファイルに設定します。その後、エラーがスローされます 基になる接続が閉じられました:

接続が予期せず閉じられました: 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();
4

0 に答える 0