2013-03-07 2 views
2

메서드를 만들었습니다. 여기서는 HttpWebRequest을 사용하여 표시된 URL에서 데이터를 요청합니다. 브라우저에 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

+0

응답을 닫기 전에 스트림을 읽는지 확인하십시오. 그렇다면 사용자 에이전트와 리퍼러 헤더를 보내고, 일부 사이트는 스크래퍼를 감지하도록 코드화됩니다. – bizzehdee

+0

모두에게 감사드립니다. – shresthaal

답변

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

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