为什么相同的 http 请求在浏览器中有效,但从我的 Android 应用程序发送时却失败了?
Why the same http request works in browser and fails when sent from my Android app?
我正在尝试从 Directus Api 获取 jSON 数据,并且从浏览器发出的请求工作正常。但是,当我从我的 android 应用程序发送完全相同的请求时(相同的 URLs,带有 'Authorization' header 或带有参数)- 请求失败并显示
java.io.FileNotFoundException 和响应代码 405.
带有参数的URL:WORKS IN BROWSER
http://example.com/dev/public/_/items/cities/1?access_token=my_test_token
带有参数的相同请求:ADNROID 失败
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,用header发送'Authorization: Bearer my_test_token':在浏览器中工作
http://示例.com/dev/public/_/items/cities/1
与 'Authorization: Bearer my_test_token' header 相同的请求:在 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();
以上请求(带有参数或 'Authorization')在 Android 中均无效。浏览器和 Android 请求之间有什么区别吗?为什么相同的请求在 Android 上失败,给出 java.io.FileNotFoundException 但在浏览器中有效?谁能帮忙?谢谢
我发现我正在使用 POST 并在允许的方法为 GET 时尝试发送输出流,因此服务器返回 405 'methodNotAllowed'。
我正在尝试从 Directus Api 获取 jSON 数据,并且从浏览器发出的请求工作正常。但是,当我从我的 android 应用程序发送完全相同的请求时(相同的 URLs,带有 'Authorization' header 或带有参数)- 请求失败并显示 java.io.FileNotFoundException 和响应代码 405.
带有参数的URL:WORKS IN BROWSER
http://example.com/dev/public/_/items/cities/1?access_token=my_test_token
带有参数的相同请求:ADNROID 失败
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,用header发送'Authorization: Bearer my_test_token':在浏览器中工作
http://示例.com/dev/public/_/items/cities/1
与 'Authorization: Bearer my_test_token' header 相同的请求:在 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();
以上请求(带有参数或 'Authorization')在 Android 中均无效。浏览器和 Android 请求之间有什么区别吗?为什么相同的请求在 Android 上失败,给出 java.io.FileNotFoundException 但在浏览器中有效?谁能帮忙?谢谢
我发现我正在使用 POST 并在允许的方法为 GET 时尝试发送输出流,因此服务器返回 405 'methodNotAllowed'。