Lỗi xác thực: Không thể trả lời bất kỳ thách thức nào sau đây: {} Android - 401 Không được phépLỗi xác thực: Không thể phản hồi bất kỳ thách thức nào sau đây: {} Android - 401 Không được phép
Tôi đã tham khảo từ liên kết này Authentication Error when using HttpPost with DefaultHttpClient on Android
Tôi đang làm việc trên ứng dụng Android được hỗ trợ trong Drupal. Trong đó tôi đang gửi dữ liệu từ ứng dụng Android đến trang web drupal - webservice ở định dạng JSON. Bây giờ tôi có thể đọc dữ liệu JSON từ dịch vụ web Drupal và viết nó trong ứng dụng Android của tôi. Nhưng đối mặt với vấn đề bằng văn bản về drupal từ android, nó tạo ra phản ứng với mã trạng thái
401 Unauthorized
Từ ứng dụng bản địa android nó tạo ra 401, trong khi từ PhoneGap-từ android khi tôi đưa ra yêu cầu AJAX nó hoạt động hoàn hảo & viết một bài báo hay trên trang web drupal. điều đó có nghĩa là webservice hoạt động hoàn hảo &
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
đây là mã của tôi cho 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;
}
}
}
đây là logcat mà tôi nhận được.
08-09 12:41:29.063: I/System.out(336): value of the post =============> [email protected]
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
Đây là yêu cầu PhoneGap Ajax của tôi hoạt động hoàn hảo.
$('#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;
});
======================= ======================================
Chỉnh sửa:
Tôi có đã thử nhiều phương pháp khác nhau cho Apache httpclient cho lỗi của tôi. Thời gian này tôi đã thực hiện một số nghiên cứu và tìm kiếm trên google và phát hiện ra một số nội dung thú vị.
1st điều mà tôi thấy rằng Android-Google Chính thức không đề xuất Apache HttpClient mà tôi đang sử dụng trong mã của mình. Kiểm tra liên kết này. Trong thông điệp liên kết đó từ Jesse Wilson từ nhóm Dalvik. Trong đó họ đề nghị sử dụng HttpURLConnection thay vì DefaultHttpClient và cũng được viết rằng nhóm Android sẽ không còn phát triển Apache httpclient nữa. do đó, phiên bản cũ hơn tôi đang sử dụng.
http://android-developers.blogspot.in/2011/09/androids-http-clients.html
2nd điều mà tôi đã tìm thấy tạo liên kết này. Nó cho thấy rằng Android được vận chuyển với HttpClient 4.0 Beta2 của Apache, có một lỗ hổng, khi nói đến Xác thực cơ bản. Phương pháp xác thực mà tôi đang sử dụng là của HttpClient 3.x, mà tôi đã tìm thấy từ liên kết này. kiểm tra liên kết. http://hc.apache.org/httpclient-3.x/authentication.html#Preemptive_Authentication
Vì vậy, vấn đề phiên bản.
http://dlinsin.blogspot.in/2009/08/http-basic-authentication-with-android.html
Tôi cũng đã tìm thấy một số liên kết với giải pháp tiềm năng của vấn đề này.
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?
Từ các liên kết này, tôi đã kết luận rằng nếu chúng tôi nâng cấp Apache HttpClient lên phiên bản ổn định mới nhất thì vấn đề này có thể được giải quyết.
Nhưng điều này là không thể trực tiếp, vì Nhóm Android đã chính thức ngừng hỗ trợ cho httpclient Apache.
Với liên kết này Có thể giải quyết được. Tôi đã không thử nó nhưng tôi đang làm việc trên nó.
Đây là thư viện có thể giúp nâng cấp phiên bản httpclient trong Android.
Các giải pháp khác có thể được sử dụng HttpURLConnection .Tôi cũng đang làm việc trên nó.
Nhưng hầu hết mọi người ở đây trên stackoverflow và Internet dường như sử dụng Mặc địnhHttpCLient bằng Android. Và ofcourse nó cũng làm việc với tôi trong suốt ứng dụng của tôi bao gồm đăng nhập, đăng ký, đọc từ máy chủ và phiên và chức năng khác.Chỉ cần nó không làm việc trực tiếp gửi một số bài viết đến trang web máy chủ-Drupal của tôi. Nó hoạt động hoàn hảo với yêu cầu POST trong quá trình đăng ký người dùng trên máy chủ.
Vì vậy, bạn bè, mọi đề xuất liên quan đến điều này? tại sao nó không hoạt động chỉ với bài viết?
Tôi cũng đã xem câu hỏi này http://stackoverflow.com/questions/10407547/error-http-1-1-401-unauthorized-with-basic-authentication-in-android-ews-201? rq = 1 & đã thử nó trong mã của tôi ... với tên người dùng và mật khẩu đã chuyển, nhưng nó vẫn không hoạt động. Vẫn phản hồi tương tự -> 401 –
Thử http: // stackoverflow.com/questions/8022800/problem-doing-ajax-yêu-với-một-phonegap-ứng dụng –
@ChanchalShelar Tôi không phải đối mặt với vấn đề với phonegap ... nó hoạt động hoàn hảo ... Tôi có vấn đề với ứng dụng Java Android. Vì vậy, ở đây câu hỏi của tôi là: cùng một máy chủ làm việc với Phonegap, sau đó tại sao nó không hoạt động với Android. –