我正在尝试从Directus Api获取jSON数据,并且从浏览器生成请求时工作正常。但是,当我从我的Android应用程序发送相同的请求时(相同的URL,带有'Authorization'标题或带参数) - 请求失败,带有java.io.FileNotFoundException和响应代码405。
带参数的URL:WORKS IN BROWSER
HTTP://example.com/Dev/public/_/items/cities/1?access_token=没有_test_token
带参数的相同请求:FAILS IN ANDROID
Uri.Builder builder = new Uri.Builder();
builder.appendQueryParameter("access_token","my_test_token");
//..
URL url = new URL(serverURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.addRequestProperty("Content-Type", "application/json; UTF-8");
conn.addRequestProperty("Accept","application/json; charset=utf-8");
conn.setRequestMethod("POST");
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
没有参数的URL,使用标题'Authorization:Bearer my_test_token'发送:浏览器中的工作
HTTP://example.com/Dev/public/_/items/cities/1
与'授权:Bearer my_test_token'标题相同的请求:FAILS IN ANDROID
URL url = new URL(serverURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.addRequestProperty("Authorization", "Bearer " + token);
conn.addRequestProperty("Content-Type", "application/json; UTF-8");
conn.addRequestProperty("Accept","application/json; charset=utf-8");
conn.setRequestMethod("POST");
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
以上请求(带参数或“授权”)不适用于Android。浏览器和Android请求之间有什么区别吗?为什么同样的请求在Android上失败,给出java.io.FileNotFoundException但在浏览器中有效?有人可以帮忙吗?谢谢。
我已经发现我正在使用POST并尝试在允许的方法为GET时发送输出流,因此服务器返回405'methodNotAllowed'。