- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
身份验证错误:无法响应以下任何挑战:{} Android - 401 未经授权
我引用了这个链接 Authentication Error when using HttpPost with DefaultHttpClient on Android
我正在开发 Drupal 支持的 android 应用程序。因为我正在将数据从 android 应用程序发送到 drupal 网站 - JSON 格式的 web 服务。现在我可以从 Drupal web 服务读取 JSON 数据并将其写入我的 android 应用程序。但是在 drupal 上从 android 编写时遇到问题,它会生成带有状态代码的响应
401 Unauthorized
它从 android native 应用程序生成 401 ,而从 phonegap-from android 当我启动 AJAX 请求时它完美地工作并在 drupal 网站上写一篇文章或页面。所以这意味着 web 服务可以完美地工作 &
my phonegap android app works perfectly there is problem with Android native JAVA application I am running my android application on Android2.3.4 -> Samsung Galaxy S Plus - Samsung GT-I9001
这是我的 java android 代码。
==============================
String url = "XXX";
strResponse1 = makeWebForPostIdea(url,title,body);
public static String makeWebForPostIdea(String url, String title,String body)
{
JSONStringer jsonobject = null;
JSONObject json = null;
JSONObject jsonnode = null;
DefaultHttpClient client = new DefaultHttpClient();
Credentials creds = new UsernamePasswordCredentials("username", "password");
client.getCredentialsProvider().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), creds);
HttpPost post = new HttpPost(url);
System.out.println("value of the post =============> "+post);
try {
JSONObject jsonvalue = new JSONObject();
jsonvalue.put("value", body.toString());
JSONArray array = new JSONArray();
array.put(jsonvalue);
jsonnode = new JSONObject();
jsonnode.put("und", array);
System.out.println("@@@@@@2 jsonnode=======>"+jsonnode.toString());
} catch (JSONException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}
try {
jsonobject = new JSONStringer().array().object().key("und").object().key("0").object().key("value").value(body).endObject().endObject().endObject().endArray();
System.out.println("=============>"+jsonobject);
} catch (JSONException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("type","page"));
params.add(new BasicNameValuePair("title",title));
params.add(new BasicNameValuePair("language","und"));
params.add(new BasicNameValuePair("body",jsonobject.toString()));
System.out.println("value of the params =============> "+params);
UrlEncodedFormEntity formEntity = null;
try {
formEntity = new UrlEncodedFormEntity(params);
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
post.setEntity(formEntity);
try {
HttpResponse response = client.execute(post);
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("=========> statusCode post idea=====> "+statusCode);
if (statusCode == HttpStatus.SC_OK)
{
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
return iStream_to_String(is);
}
else
{
return "Hello This is status ==> :"+String.valueOf(statusCode);
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static String iStream_to_String(InputStream is1) {
BufferedReader rd = new BufferedReader(new InputStreamReader(is1), 4096);
String line;
StringBuilder sb = new StringBuilder();
try {
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String contentOfMyInputStream = sb.toString();
return contentOfMyInputStream;
}
}
}
这是我得到的 logcat。
08-09 12:41:29.063: I/System.out(336): value of the post =============> org.apache.http.client.methods.HttpPost@4053c3c8
08-09 12:41:29.093: I/System.out(336): @@@@@@2 jsonnode=======>{"und": [{"value":"ddddddd"}]}
08-09 12:41:29.093: I/System.out(336): =============>[{"und":{"0":{"value":"ddddddd"}}}]
08-09 12:41:29.103: I/System.out(336): value of the params =============> [type=page, title=hhhh, language=und, body=[{"und":{"0":{"value":"ddddddd"}}}]]
08-09 12:41:30.913: W/DefaultRequestDirector(336): Authentication error: Unable to respond to any of these challenges: {}
08-09 12:41:30.913: I/System.out(336): =========> statusCode post idea=====> 401
08-09 12:41:30.924: I/System.out(336): =========> Response from post idea => Hello This is status ==> :401
这是我的 PhoneGap Ajax 请求,它运行良好。
$('#page_node_create_submit').live('click',function(){
var title = $('#page_node_title').val();
//if (!title) { alert('Please enter a title.'); return false; }
var body = $('#page_node_body').val();
//if (!body) { alert('Please enter a body.'); return false; }
// BEGIN: drupal services node create login (warning: don't use https if you don't have ssl setup)
$.ajax({
url: "XXX",
type: 'post',
data: 'node[type]=page&node[title]=' + encodeURIComponent(title) + '&node[language]=und&node[body][und][0][value]=' + encodeURIComponent(body),
dataType: 'json',
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert('page_node_create_submit - failed to login');
console.log(JSON.stringify(XMLHttpRequest));
console.log(JSON.stringify(textStatus));
console.log(JSON.stringify(errorThrown));
},
success: function (data) {
$.mobile.changePage("index.html", "slideup");
}
});
// END: drupal services node create
return false;
});
============================================= ==================================
我已经为我的错误尝试了 Apache httpclient 的各种方法。在这段时间里,我做了一些研究并在谷歌上搜索并发现了一些有趣的东西。
第一 我发现 Android-Google 官方不推荐我在代码中使用的 Apache HttpClient。检查此链接。在来自 Dalvik 团队的 Jesse Wilson 的链接消息中。因为他们建议使用 HttpURLConnection 而不是 DefaultHttpClient 并且还写道 Android 团队将不再开发 Apache httpclient 。所以它是我使用的旧版本。
http://android-developers.blogspot.in/2011/09/androids-http-clients.html
第二 我从这个链接中找到的东西。它表明 Android 随 Apache 的 HttpClient 4.0 Beta2 一起发布,这在基本身份验证方面有一个缺陷。我使用的身份验证方法是 HttpClient 3.x,我发现了从这个链接。检查链接。 http://hc.apache.org/httpclient-3.x/authentication.html#Preemptive_Authentication
所以是版本问题。
http://dlinsin.blogspot.in/2009/08/http-basic-authentication-with-android.html
我还找到了一些与此问题的潜在解决方案相关的链接。
http://ogrelab.ikratko.com/using-newer-version-of-httpclient-like-4-1-x/
Apache HttpClient 4.1 on Android
What version of Apache HTTP Client is bundled in Android 1.6?
从这些链接中,我得出一个结论,如果我们将 Apache HttpClient 升级到最新的稳定版本,那么这个问题就可以解决。
但这根本不可能,因为 Android Team 已正式停止对 Apache httpclient 的支持。
有了这个链接就可以解决了。我还没有尝试过,但我正在努力。
它是可以帮助升级Android中的httpclient版本的库。
另一个解决方案可能是使用 HttpURLConnection 。我也在研究它。
但是这里的大多数人在 stackoverflow 和 Internet 上似乎都在 Android 上使用 DefaultHttpCLient。当然,它也在我的整个应用程序中与我合作,包括登录、注册、从服务器和 session 读取以及其他功能。只是它不能直接将一些文章发布到我的服务器-Drupal 网站。在服务器上注册用户期间,它与 POST 请求完美配合。
那么 friend 们,对此有什么建议吗?为什么它不适用于发布文章?
最佳答案
为什么它可以在 PhoneGap 而不是 Java 中运行。 PhoneGap 在 Web 容器中运行该应用程序,因此已经过身份验证 - 并且您拥有所有正确的 cookie。 AJAX 将共享同一个 session ,一切都“正常工作”。
但是 HTTPClient 是完全不同的 - 您正在启动一个全新的 HTTP session ,并且一切都必须正确。
关于 HTTP Auth 工作原理的一些评论:
有几种 HTTP 身份验证方法 - 由网络服务器选择。在继续之前,请检查您的 Drupal 配置以确定它是否:
(另请注意,Web 容器具有“智能”,能够根据服务器的请求尝试不同的身份验证方法,所有这些都在幕后进行)
同时检查 Drupal 网络日志。一些提示:
如果这有帮助,请告诉我。如果没有,您可以根据这篇文章提供更多详细信息,我可以跟进更多建议。
关于java - 身份验证错误 : Unable to respond to any of these challenges: {} Android - 401 Unauthorized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11878896/
我在 jquery selectors 中进行了搜索一段时间了,但找不到任何解决我的问题的方法。 我有一个由 foreach 归档的 html 表。每行都有几个弹出工具提示的链接。我的问题:找不到正确
我决定采取Eudyptula Challenge . 在我提交了第一个任务之后,它就是构建一个简单的“Hello World!”。模块,我收到了以下答案。 Please read the requir
因此,在安全性非常重要的应用程序的情况下 - 如何实现挑战问题的想法。那就是……你会: 检测电脑IP是否变化,提出挑战题。 检测 cookie 是否丢失。 检测计算机名称是否不同。 上述方法的一些组合
我有一个网络应用程序可以接受匿名和经过身份验证的请求。如果我将表单数据(通过文件上传)匿名发布到 Web 应用程序,然后收到 401 质询,我会在第二次请求时再次重新发送所有表单数据吗? 我并不是要避
我正在尝试解决CTF挑战,其中的目标是猜测生成的数字。由于这个数字很大,而且每个数字只有10次尝试,我认为你不能应用二进制搜索或任何类型的算法来解决它,这与以某种方式获得随机函数的种子并能够生成下一个
我正在尝试解决CTF挑战,其中的目标是猜测生成的数字。由于这个数字很大,而且每个数字只有10次尝试,我认为你不能应用二进制搜索或任何类型的算法来解决它,这与以某种方式获得随机函数的种子并能够生成下一个
我遇到了与这篇文章中所述相同的问题:“First external login attempt redirects back to login action, second one works” 对他
我在使用 python3 的 CodeFights 上遇到了“areSimilar”问题。 提示指出“如果可以通过交换一个数组中的最多一对元素从另一个数组中获得一个数组,则两个数组被称为相似。 给定两
我正在寻找一种方法将 OpenFeint 的仪表板 View 直接打开到挑战 View 。有一条消息会启动仪表板,还有一条消息会在发送之前显示挑战: [OpenFeint launchDashboar
该命令: $ letsencrypt certonly --manual --preferred-challenges dns --email foo@bar.com --domains test00
Link to Codewars challenge 这是非常基本的,但由于某种原因,我无法弄清楚为什么我无法返回 null当有不是 数组中任何不连续的数字。当数组不完全连续时,我的代码可以正常工作:
ControllerBase类(class)有Challenge方法,返回 ChallengeResult 的对象类(class)。CookieAuthenticationOptions类(class
我一直在努力解决 Hackerrank 上的热身挑战。对于这个特殊的挑战 - https://www.hackerrank.com/challenges/cut-the-sticks - 我已经编写了
我在 Android 应用程序中使用 Volley 从 Misfit API ( http://build.misfit.com ) 获取数据。我尝试构建一个间歇性 Activity ,在有人登录后从
我的代码有效,但未被接受以通过挑战。对于我做错的任何帮助,我们将不胜感激。 挑战说明: 给定一个整数数组。返回一个数组,其中第一个元素是正数的计数,第二个元素是负数的总和。如果输入数组为空或 null
背景 我有一个第三方框架,它对我提供给它的 URL 进行一些网络请求。请求的格式为: https://10.0.2.2:8000/api/ .... 由于架构是 https,我不断收到来自第三方库的错
我已经完全按照许多教程将 GameCenter 集成到我的应用程序中。我正在使用正确的代码来发布分数,并获得分数正在报告给 GC 的报告。但是,当我尝试加载排行榜时,它显示的是“无挑战”空白屏幕。 我
有人可以告诉我为什么 FCC 不接受我的解决方案,即使它通过了所有测试? 下面是挑战的链接,但我将在此处发布问题和测试,以更好地遵守社区。 FCC 挑战: https://www.freecodeca
我正在关注this java 中的小例子,用于测试 JRadius 客户端。但我不断收到此错误: Exception in thread "main" net.sf.jradius.exception
我在我的项目中使用 google reCAPTCHA 版本 2。它工作正常。但是当我选中复选框时,它总是显示一组图像作为挑战。但我只想显示字母而不是图像。我该怎么做? 最佳答案 据我所知,目前还没有这
我是一名优秀的程序员,十分优秀!