2012-09-12 5 views
0

원격 서버에서 xml 파일을 읽으 려하지만 어떻게 든 서버가 내 요청에 응답하지 않습니다. 따라서 Gzip에서 "GZip 헤더의 마법 번호가 올바르지 않습니다."예외가 발생합니다. 어떤 생각?XML 데이터를 읽을 수 없습니다

private static string GetFile() 
    { 
     Uri uri = new Uri(@"http://www.iddaa.com.tr/XML/IDDAAMACPROGRAMI/index.htm?iddaadrawid=12.09.2012&iddaadrawide=13.09.2012&foraccess=KSsec654"); 

     string xmlFile; 

     HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create(uri); 
     req.UserAgent = 
      "MOZILLA/5.0 (WINDOWS NT 6.1; WOW64) APPLEWEBKIT/537.1 (KHTML, LIKE GECKO) CHROME/21.0.1180.75 SAFARI/537.1"; 
     req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
     req.Headers.Add("Accept-Encoding", "gzip,deflate"); 


     using (GZipStream zip = new GZipStream(req.GetResponse().GetResponseStream(), 
               CompressionMode.Decompress)) 
     { 
      var reader = new StreamReader(zip); 
      xmlFile = reader.ReadToEnd(); 
     } 

     return xmlFile; 
    } 

답변

5

gzip을 사용할 필요가 없습니다. 서버가 응답에 gzip 헤더를 보내는 경우 HttpWebRequest이 자동으로이 작업을 수행합니다.

하지만 더욱 사용하여 코드를 단순화 할 수있는 WebClient :

private static string GetFile() 
{ 
    using (var client = new WebClient()) 
    { 
     client.Headers[HttpRequestHeader.UserAgent] = "MOZILLA/5.0 (WINDOWS NT 6.1; WOW64) APPLEWEBKIT/537.1 (KHTML, LIKE GECKO) CHROME/21.0.1180.75 SAFARI/537.1"; 
     client.Headers[HttpRequestHeader.Accept] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; 
     client.Headers[HttpRequestHeader.AcceptEncoding] = "gzip,deflate"; 
     var xmlFile = client.DownloadString("http://www.iddaa.com.tr/XML/IDDAAMACPROGRAMI/index.htm?iddaadrawid=12.09.2012&iddaadrawide=13.09.2012&foraccess=KSsec654"); 
     return xmlFile; 
    } 
} 

또는 도입 된 새로운 HttpClient 클래스 .NET 4.5 : 나는 Gzip의 부분을 제거하고 일 Dimitrow

private async Task<string> GetFile() 
{ 
    using (var client = new HttpClient() { BaseAddress = new Uri("http://www.iddaa.com.tr") }) 
    { 
     client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("MOZILLA", "5.0")); 
     client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("(WINDOWS NT 6.1; WOW64)")); 
     client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("APPLEWEBKIT", "537.1")); 
     client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("(KHTML, LIKE GECKO)")); 
     client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("CHROME", "21.0.1180.75")); 
     client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("SAFARI", "537.1")); 

     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html")); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xhtml+xml")); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml", 0.9)); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*", 0.8)); 

     client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip")); 
     client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate")); 
     var result = await client.GetAsync("/XML/IDDAAMACPROGRAMI/index.htm?iddaadrawid=12.09.2012&iddaadrawide=13.09.2012&foraccess=KSsec654"); 
     result.EnsureSuccessStatusCode(); 
     return await result.Content.ReadAsStringAsync(); 
    } 
} 
+0

, 고맙습니다! – ozgun

+0

@ user712847,이 답변을 통해 문제 해결에 도움이 되었다면 옆에있는 체크 표시를 클릭하여 답변으로 표시하십시오. http://meta.stackexchange.com/questions/5234/how-does-accepting- 답장 작업 –

+0

대단히 고마워 .. 내 REST HTTP GET 요청에서 발생할 수있는 XML 오류 응답을 얻으려고했다.이 한 줄의 'return await result.Content.ReadAsStringAsync();' 위의 코드 샘플에서 내 하루를 저장했습니다! – Vinu

관련 문제