2013-03-07 70 views
2

我创建了GetCourses()方法,其中我使用HttpWebRequest从所示的Url请求数据。如果我在浏览器中复制粘贴网址,浏览器将显示xml数据。我也用小提琴手做了一些要求。在提琴手它说,数据编码,我必须解码它。所以,我点击解码,我可以看到XML。但是,使用下面的代码我回到Content-Length = -1。httpwebrequest getresponse()不返回任何内容,而提琴手显示内容

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) 
     { 

     } 
    } 
+0

您确定关闭响应,然后阅读流?这没有任何意义。当你关闭你的响应时,你也会使底层数据不可用。 – user1908061 2013-03-07 20:12:21

+0

确保您在关闭响应之前阅读该流,如果是的话,请确保您发送了用户代理和引用者标头,某些网站会被编码以检测刮板 – bizzehdee 2013-03-07 20:14:08

+0

谢谢大家 – shresthaal 2013-03-07 20:25:57

回答

1

,当我跑了这个工作。在关闭它之前,您需要阅读该流。另外,很多人喜欢使用关键字using自动关闭Streams。

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) 
{ 

} 
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();