2012-09-10 64 views
3

我有以下寫上單(單上的Ubuntu)代碼無法得到響應的HttpWebRequest

string URI = "http://www.google.com/webmasters/tools/feeds/http%3A%2F%2Fwww%2Ekarkala%2Ein%2F/keywords/?access_token=ya29.ABCDEFGI7bzJmlLWtk290M-PkNx20ej9p6a0sxoaxFPe_7qypXuW7Q"; 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URI); 
request.Headers.Add("GData-Version", "2"); 
request.Method = "GET"; 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

的代碼是正從谷歌網站管理員API響應的一部分。 但我得到以下錯誤,而試圖讓在System.Net.HttpWebRequest.CheckFinalStatus(System.Net.WebAsyncResult結果)的反應

The remote server returned an error: (400) Bad Request. 

系統 [0x00000]中:在System.Net 0 。 HttpWebRequest.SetResponseData(System.Net.WebConnectionData data)[0x00000] in:0

如果我在瀏覽器上覆制粘貼相同的URI,我可以看到xml響應。

+3

如果這真的是你的訪問鍵,你真的應該編輯您的問題,並替換成虛擬按鍵。 – Icemanind

回答

2

你必須設置請求的內容類型:

request.ContentType = "text/xml";

否則,遠程服務器將不知道如何處理你的要求去做。

+0

將uri粘貼到瀏覽器中只會證明Web請求會返回數據,瀏覽器會自動解析響應,直到您告訴它以及如何執行代碼爲止。我建議你先試試aevitas的解決方案,如果這樣做不行,那就試試使用Chromes Postman或其他一些SOAP客戶端。 –

0

難道這是URI的值編碼的方式嗎? 您是否嘗試過使用Fiddler

它具有非常好的功能,您可以調查Web請求。 希望有所幫助。

0

這是我在Xamarin中使用的一個函數,它獲得了一個CSRF標記,但是從這裏你可以看到我如何設置我的請求。作爲aevitas差不多說,你需要指定的Content-Type爲每行3

public JsonToken getCSRFToken(){ 
     var request = HttpWebRequest.Create(string.Format(this.apiBaseUrl + @"/druidapi/user/token.json")); 
     request.ContentType = "application/json"; 
     request.Method = "GET"; 

     Console.Out.WriteLine("GET call to: {0}", this.apiBaseUrl.ToString() + @"/druidapi/user/token.json"); 

     using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
     { 
      if (response.StatusCode != HttpStatusCode.OK) 
       Console.Out.WriteLine("Error fetching data. Server returned status code: {0}", response.StatusCode); 
      using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
      { 
       var content = reader.ReadToEnd(); 

       if(string.IsNullOrWhiteSpace(content)) { 
        Console.Out.WriteLine("Response contained empty body..."); 
       } 
       else { 
        Console.Out.WriteLine("Response Body: \r\n {0}", content); 
       } 

       if (content == null) { 
        throw new Exception ("content is NULL"); 
       } else { 

        JsonToken deserializedToken = JsonConvert.DeserializeObject<JsonToken>(content); 
        return deserializedToken; 
       } 

      } 
     } 
    }