2

表示されているURLからデータを要求するためGetCourses()に使用しているメソッドを作成しました。HttpWebRequestブラウザにURLをコピーして貼り付けると、ブラウザにxmlデータが表示されます。また、フィドラーを使用していくつかのリクエストを行いました。フィドラーでは、データがエンコードされていると表示され、デコードする必要があります。それで、デコードをクリックすると、XMLが表示されます。ただし、以下のコードを使用すると、Content-Length=-1が返されます。

public static void GetCourses()
    {
        try
        {
            HttpWebRequest requestForItCourse =
               (HttpWebRequest)WebRequest.Create("http://www.mnsu.edu/schedule/direct.php?action=courses&term=20135&subject=it");
            requestForItCourse.AutomaticDecompression = DecompressionMethods.GZip|DecompressionMethods.Deflate;
            HttpWebResponse responseFromMnsuDirectPhp =
                (HttpWebResponse)requestForItCourse.GetResponse();

            Stream dataStream = responseFromMnsuDirectPhp.GetResponseStream();
            responseFromMnsuDirectPhp.Close();
//Parse and insert courses into the database
        }
        catch (Exception ex)
        {

        }
    }
4

2 に答える 2

2

応答を閉じる前に、応答ストリームを読み取る必要があります。

これを試して:

HttpWebRequest requestForItCourse = (HttpWebRequest)WebRequest.Create("http://www.mnsu.edu/schedule/direct.php?action=courses&term=20135&subject=it");
requestForItCourse.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
HttpWebResponse responseFromMnsuDirectPhp = (HttpWebResponse)requestForItCourse.GetResponse();

StreamReader dataStream = new StreamReader(responseFromMnsuDirectPhp.GetResponseStream());
string data = dataStream.ReadToEnd();

responseFromMnsuDirectPhp.Close();
dataStream.Close();
于 2013-03-07T20:18:27.093 に答える
1

これは、実行したときに機能しました。ストリームを閉じる前に読み取る必要があります。補足として、多くの人はusingキーワードを使用してストリームを自動的に閉じることを好みます。

try
{
    HttpWebRequest requestForItCourse = (HttpWebRequest)WebRequest.Create("http://www.mnsu.edu/schedule/direct.php?action=courses&term=20135&subject=it");
    requestForItCourse.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
    HttpWebResponse responseFromMnsuDirectPhp =
                (HttpWebResponse)requestForItCourse.GetResponse();

    string raw_xml;
    using(var sr = new StreamReader(responseFromMnsuDirectPhp.GetResponseStream()))
    {
        raw_xml = sr.ReadToEnd();
    }

    //Parse and insert courses into the database
}
catch (Exception ex)
{

}
于 2013-03-07T20:19:50.363 に答える