3

我在mono上编写了以下代码(ubuntu上的Mono)

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();

该代码是从 Google 网站管理员 API 获取响应的一部分。但是在尝试获取响应时出现以下错误

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

System.Net.HttpWebRequest.CheckFinalStatus (System.Net.WebAsyncResult 结果) [0x00000] 在 System.Net.HttpWebRequest.SetResponseData (System.Net.WebConnectionData 数据) [0x00000] in :0 的系统

如果我在浏览器上复制粘贴相同的 URI,我可以看到 xml 响应。

4

3 回答 3

2

您必须设置请求内容类型:

request.ContentType = "text/xml";

否则,远程服务器将不知道如何处理您的请求。

于 2012-09-10T16:02:44.277 回答
0

会不会是 URI 值的编码方式?您是否尝试过使用提琴手

它具有非常好的功能,可让您调查 Web 请求。希望有帮助。

于 2012-09-10T17:29:34.237 回答
0

这是我在 Xamarin 中使用的一个函数,它获取一个 CSRF 令牌,但是从这里你可以看到我是如何设置我的请求的。正如 aevitas 所说,您需要根据第 3 行指定 Content-Type

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

            }
        }
    }
于 2015-07-21T09:23:28.840 回答