2012-12-06 4 views
0

브라우저에 URL을 넣으면 서버가 제대로 응답합니다 (XML). 비록이 동일한 URL이 WebClient.DownloadingString() 메서드를 통과하면 URL의 내용이 변경되고 서버가 제대로 응답하지만 액세스가 거부 된 메시지 (XML)도 변경됩니다. 이미 등 UT8, ISO, 그들 중 아무도로 변경 드 인코딩을 시도WebClient.DownloadingString 변경 URL 요청

http://...<parameter1>S<%2Fparameter1>%0D%0A++<parameter2>S<%2Fparameter2>%0D%0A++<parameter3>S<%2Fparameter3>%0D%0A<%2Fqueryservice>%0D%0A%09%09 

: 하나의이 같은 요청에 사용

"오류 메시지"

<?xml version="1.0" encoding="ISO-8859-1"?><said:service xmlns:said="http:xxx"><said:codigo_erro>8</said:codigo_erro><said:mensagem_erro>Unable</said:mensagem_erro></said:service> 

URL은 일했다.

답변

1

서버가 기대하는 모든 필요한 데이터, 쿠키 및 요청 헤더를 보내야합니다.

Fiddler Web Debugger를 설치하고 웹 브라우저에서 성공적인 요청을 모니터링 한 다음 응용 프로그램에서 이러한 요청을 다시 작성하는 것이 좋습니다.

WebClient이 쿠키를 처리하지 않기 때문에 서버가 일부 오류 페이지로 리디렉션되었을 수 있습니다. 자신 만의 WebClient 버전을 만들고 쿠키 지원을 추가 할 수 있습니다. WebClient에서 상속받은 클래스를 만들고 GetWebRequest 메서드를 재정의하면 CookieContainer을 추가해야합니다. 다음은 쿠키를 처리하는 WebClient의 간단한 구현입니다.

public class MyWebClient : WebClient 
{ 
    public CookieContainer CookieContainer { get; private set; } 

    public MyWebClient() 
    { 
     this.CookieContainer = new CookieContainer(); 
    } 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     WebRequest request = base.GetWebRequest(address); 
     if (request is HttpWebRequest) 
     { 
      (request as HttpWebRequest).CookieContainer = this.CookieContainer; 
      (request as HttpWebRequest).AllowAutoRedirect = true; 
     } 

     return request; 
    } 
}