【发布时间】:2011-05-24 17:32:32
【问题描述】:
我在使用 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" 部分。
希望这会有所帮助,因为我处于死胡同。
谢谢,
无限化
【问题讨论】:
-
您的网址不应该以 https 开头。然后,如果它是 https,它可能会使用证书或其他一些身份验证挑战来保护 - 如错误消息中所示。
-
我只是把那个网址作为一个例子,但它应该。但是正如我所说,我尝试 HttpPost 我自己的脚本很好,如果我尝试 HttpPost api 的非 https 部分,如在他们的示例中调用的 http 页面而不是 https,我只会在传递 nameValuePairs 时收到错误,如果我不这样做,我就不会收到身份验证错误。
-
你能告诉我们你的HttpClient构造函数吗?
-
只是HttpClient httpClient = new DefaultHttpClient();但我尝试使用此处的代码为 SSL 设置它:thinkandroid.wordpress.com/2009/12/31/… 但我仍然遇到同样的错误。
标签: android https httpclient http-post http-get