12

我在使用 HttpClient 时遇到了一个奇怪的问题。我将 DefaultHttpClient() 与 HttpPost 一起使用。我使用 HttpGet 并取得了 100% 的成功,但现在尝试切换到 HttpPost,因为我正在使用的 REST API 需要 POST 参数而不是 GET。(虽然只针对一些 API 调用,所以我知道 GET 调用工作正常,所以这不是 API 的错误)。

另外,我尝试在我编写的一个简单的 php 脚本上使用 HttpPost,该脚本查找 POST 参数“var”并将其回显到屏幕,按如下方式传递此参数可以正常工作:

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

    postMethod = new HttpPost("http://www.examplewebsite.com");

    nameValuePairs.add(new BasicNameValuePair("var", "lol"));

    try {
        postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        response = httpClient.execute(postMethod, responseHandler);
        Log.i("RESTMethod", response);
...

问题是,当我尝试对 API 进行相同的调用(但显然将参数更改为 API 参数)时,我收到以下错误:

Authentication error: Unable to respond to any of these challenges: {}

我请求的页面是 HTTPS 页面,这可能是问题吗?

但是对 API 上的原始 HTTP 页面执行相同类型的 POST 请求会产生相同的错误,除非我注释掉 StringEntity 部分然后它运行(但返回 xml 并且我想传递一个参数来请求 JSON 中的数据) .

这似乎是一个非常奇怪的问题(非 https 部分),但在这个问题上找不到任何帮助,如果答案在那里,我们很抱歉。

有任何想法吗?

提前致谢,

无限化

编辑:好的,我无处可去,所以我想如果我将您定向到 API,它可能会有所启发,它是8Tracks API,正如您所看到的,您需要为所有请求传递一个开发密钥(api_key),而我就是其中的一部分我坚持使用 https 登录用户:http://www.8tracks.com/sessions.xml ”部分。

希望这会有所帮助,因为我处于死胡同。

谢谢,

无限化

4

4 回答 4

13

身份验证错误:无法响应任何这些质询:{}

此错误消息意味着服务器以401 (Unauthorized)状态代码响应但未能提供单个身份验证挑战(WWW-Authenticate标头),因此 HttpClient 无法自动从身份验证失败中恢复。

最有可能的应用程序需要一些包含在 HTTP POST 请求中的 HTML 表单中的软凭证。

于 2011-05-25T13:55:56.233 回答
3

不需要声明端口和协议吗?我只是在摇晃这段代码,所以如果它没有立即正确编译,请不要生气。另外,我通常为我的 setCredentials() 提供一个 UsernamePasswordCredentials 但我想它是一样的。

HttpHost host = new HttpHost("www.foo.com", 443, "https");

// assemble your GET or POST

client.getCredentialsProvider().setCredentials(new AuthScope(host.getHostName(), host.getPort()));

HttpResponse response = client.execute(host, [HttpPost or HttpGet]);

有关 setCredentials 的更多信息,请点击此处

于 2011-05-24T19:03:26.127 回答
3

以下是我遇到类似问题的方式:

DefaultHttpClient client = new DefaultHttpClient();
client.getCredentialsProvider().setCredentials(AuthScope.ANY,
            new UsernamePasswordCredentials(username, password));

感谢瑞安的正确方向。

于 2012-01-25T18:54:07.723 回答
1

没有为我的 Twitter 应用程序指定回调 URL对我来说导致了同样的错误:

Authentication error: Unable to respond to any of these challenges: {oauth=WWW-Authenticate: OAuth realm="https://api.twitter.com"}

在 Twitter 上设置回调 URL 解决了问题

于 2012-03-11T00:25:30.947 回答