2012-12-06 45 views
0

如果我將URL放在瀏覽器中,我的服務器會正​​確響應(XML)。 雖然,如果這個相同的URL通過WebClient.DownloadingString()方法,那麼URL中的內容會發生變化,而且我的服務器響應正常,但訪問被拒絕(XML也一樣),就好像事情已經發生了變化。在請求中使用WebClient.DownloadingString更改URL請求

「錯誤消息」

<?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是像這樣的:

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

我已經嘗試改變去編碼爲UT8,ISO等人沒有人工作。

回答

1

您必須確保您發送的是服務器期望的所有必要數據,Cookie和請求標頭。

我建議您安裝Fiddler Web Debugger並監控來自Web瀏覽器的成功請求,然後嘗試在您的應用程序中重新創建此類請求。

也許服務器將您重定向到一些錯誤頁面,因爲WebClient沒有處理cookie。您可以創建自己的WebClient版本並添加Cookie支持。創建一個從WebClient開始的類並覆蓋GetWebRequest方法,那麼您必須添加CookieContainer。 以下是處理cookies的簡單實施:

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