如何获得我的凌空GET请求以从非安全协议返回信息?

时间:2019-04-15 20:01:44

标签: android

正如标题所述,除非目标是https,否则我的get请求不会返回任何内容。我没有看到任何错误以进行故障排除。为了安全起见,清单中是否需要启用http?

2 个答案:

答案 0 :(得分:1)

如果您在运行Android Pie(9.0)或更高版本的设备/仿真器上运行您的应用程序,并且看到此问题,则可能与CleartextTraffic设置为false有关,因为操作系统默认对此进行设置API级别或更高。

请参阅this SO answer here,以了解为什么这是一个问题以及如何解决。

如果您只想在测试中运行它并确保调用能够正常进行,请将此代码添加到清单中:

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>

它应该工作。请注意,如果我将这些应用保留在发行代码中,那么我会拒绝Play商店中的应用。

答案 1 :(得分:0)

要获取凌空错误,您需要实现凌空错误监听器,例如

StringRequest request = new StringRequest(Request.Method.POST, url,
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.e("response", response);
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();

            }
        }) {
    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        return parameters;
    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String, String> headers = new HashMap<>();
        ......
        return headers;
    }
};

RequestQueue queue = Volley.newRequestQueue(Class.this);
queue.add(request);

}