为什么相同的http请求在浏览器中有效并且从我的Android应用程序发送时失败?

问题描述 投票:1回答:1

我正在尝试从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但在浏览器中有效?有人可以帮忙吗?谢谢。

php android httprequest directus
1个回答
0
投票

我已经发现我正在使用POST并尝试在允许的方法为GET时发送输出流,因此服务器返回405'methodNotAllowed'。

© www.soinside.com 2019 - 2024. All rights reserved.