Galaxy Nexus của tôi đã đến hôm nay và một trong những điều đầu tiên tôi làm là tải ứng dụng của tôi lên đó để tôi có thể chứng minh cho bạn bè của mình. Một phần chức năng của nó liên quan đến việc nhập Nguồn cấp RSS từ Google Reader. Tuy nhiên, khi cố gắng này, tôi đã nhận được 405 lỗi phương pháp không được phép.ICS Android 4.0 chuyển HttpURLKết nối yêu cầu GET thành yêu cầu POST
Vấn đề này là đặc trưng của Ice Cream Sandwich. Mã tôi đã đính kèm hoạt động tốt trên Gingerbread và Honeycomb. Tôi đã truy tìm lỗi đến thời điểm kết nối được thực hiện, khi yêu cầu GET biến đổi một cách kỳ diệu thành một yêu cầu POST.
/**
* Get the authentication token from Google
* @param auth The Auth Key generated in getAuth()
* @return The authentication token
*/
private String getToken(String auth) {
final String tokenAddress = "https://www.google.com/reader/api/0/token";
String response = "";
URL tokenUrl;
try {
tokenUrl = new URL(tokenAddress);
HttpURLConnection connection = (HttpURLConnection) tokenUrl.openConnection();
connection.setRequestMethod("GET");
connection.addRequestProperty("Authorization", "GoogleLogin auth=" + auth);
connection.setRequestProperty("Content-Type","application/x-www-form-urlendcoded");
connection.setUseCaches(false);
connection.setDoOutput(true);
Log.d(TAG, "Initial method: " + connection.getRequestMethod()); // Still GET at this point
try {
connection.connect();
Log.d(TAG, "Connected. Method is: " + connection.getRequestMethod()); // Has now turned into POST, causing the 405 error
InputStream in = new BufferedInputStream(connection.getInputStream());
response = convertStreamToString(in);
connection.disconnect();
return response;
}
catch (Exception e) {
Log.d(TAG, "Something bad happened, response code was " + connection.getResponseCode()); // Error 405
Log.d(TAG, "Method was " + connection.getRequestMethod()); // POST again
Log.d(TAG, "Auth string was " + auth);
e.printStackTrace();
connection.disconnect();
return null;
}
}
catch(Exception e) {
// Stuff
Log.d(TAG, "Something bad happened.");
e.printStackTrace();
return null;
}
}
Có bất kỳ điều gì có thể gây ra sự cố này không? Chức năng này có thể được mã hóa tốt hơn để tránh vấn đề này không?
Rất cám ơn trước.
Không. Loại bỏ dòng đó không tạo ra sự khác biệt nào cả. –
Ok, sau đó bạn cũng có thể thử đi với HttpClient. –
@Michael Dodd: kiểm tra phần UPDATE –