2012-09-10 48 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; 
       } 

      } 
     } 
    }