2014-01-22 3 views
0

일부 데이터를 반환하는 웹 사이트를 호출하는 코드를 작성했습니다. 나는 HttpWebRequest.GetResponse() 방법을 사용했다. 브라우저에서 URL을 클릭하면 데이터가 반환됩니다. 그러나 내 C# 코드에서 때로는 데이터를 반환하고 때로는 아무 것도 반환하지 않습니다.HttpWebRequest GetResponse() 반환하지 않음

요청이 시간 초과 또는 액세스 거부와 같은 오류를 발생시키지 않습니다. 그것은 아무것도 반환하지 않습니다. 코드에서 디버거를 사용하면 데이터를 반환합니다.

코드는 다음과 같습니다.

HttpWebRequest clnt = (HttpWebRequest)HttpWebRequest.Create(restURL); 
var resp = clnt.GetResponse(); 
if ((resp.ContentLength > 0)) 
{ 
    using (System.IO.StreamReader str = new System.IO.StreamReader(resp.GetResponseStream())) 
    { 
     if (str != null) 
     { 
      string response = str.ReadToEnd(); 
      str.Close(); 
      return response; 
     } 
    } 
} 

무엇이든 놓치면 도와주세요.

+0

'사용 중'문이 하나 빠져 있습니다. 내용이 없더라도 항상 웹 응답을 폐기해야합니다. 실패 사례에서 어떤 일이 일어 났는지는 말하지 않았습니다. 요청이 실제로 완료되었지만 내용이 없거나 시간이 초과 되었습니까? 무효 체크는 무의미하다. 생성자를 방금 호출 했으므로'str'은 결코 null이 될 수 없다. –

+0

HttpWebRequest에서 특별한 작업을 수행하지 않으면 WebClient를 사용할 수 있습니다. (var client = new WebClient()) { string response = client.DownloadString (restUrl); } –

+0

요청이 시간 초과 또는 액세스 거부와 같은 오류를 발생시키지 않습니다. 그것은 아무것도 반환하지 않습니다. 코드에서 디버거를 사용하면 데이터가 반환됩니다. –

답변

0

방법 및 콘텐츠 유형을 사용해 보셨습니까?

clnt.Method = "POST"; 
clnt.ContentType = "application/x-www-form-urlencoded"; 

그것은 다음과 같이 올 것이다 :

HttpWebRequest httpWReq = (HttpWebRequest)WebRequest.Create(url); 

     httpWReq.Method = "POST"; 
     httpWReq.ContentType = "application/x-www-form-urlencoded"; 

     HttpWebResponse response = (HttpWebResponse)httpWReq.GetResponse(); 

     string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); 
     return responseString; 

희망이 당신을 도와줍니다!

+0

원격 서버에서 오류를 반환했습니다 : (411) Length Required. –

+0

음 .. POST해야하기 때문에해야합니다. POST HttpWebRequest를 만들 때 전송할 데이터의 길이를 지정해야합니다. 코드가 필요한 경우 지정하십시오. – user3222297

+0

HttpWebRequest 및 POST 메서드를 사용하는 경우 RequestStream을 통해 내용 (또는 원하는 경우 본문)을 설정해야합니다. – user3222297

관련 문제