我在Android中使用Volley库做一个简单的GET请求。最近我发现在Android 6(Marshmallow)中我总是进入onErrorResponse
回调,没有错误信息,但错误代码是400。
我所有其他几乎相同的请求在Android 6中完美运行。只有这一个是有问题的。
当我将请求URL粘贴到浏览器中时,它可以正常工作。所以问题不是来自服务器端。
我也尝试过添加标题,但这没有帮助。
答案 0 :(得分:1)
我也使用Volley并且遇到了同样的问题。
问题是,在 Android 6.X棉花糖上,未对GET请求的UTF-8 URL参数进行编码。邓诺为什么...
因此,如果您发送GET请求,例如
http://example.com/api?key=my value
或
http://example.com/api?place=café
它将按以下方式发送:
http://example.com/api?key=my value
http://example.com/api?place=café
(返回:400-HTTP_BAD_REQUEST)
http://example.com/api?key=my+value
http://example.com/api?place=caf%C3%A9
(如果您的服务正常运行,则返回:200-HTTP_OK)
所以,我的解决方法是致电
URLEncoder.encode(value, "UTF-8");
每个参数。
答案 1 :(得分:0)
这个问题也出现在我身上,不是内容类型就是问题。 对我来说,在Android 7和更高版本的URL上,我所使用的也在浏览器上正常运行,但是在Android 6上对其进行检查时,它使我遇到了与您编写的相同的问题。 这是因为您的网址可能包含空格。
解决方案:
String url = "http://your_url.com/file.php?data=" + sendJson;
url = url.replaceAll(" ", "%20");
问题消失了!
答案 2 :(得分:0)
用URL中的“%20”替换空字符。 字符串url =“ https://zxasd/asd”; url = url.replaceAll(“”,“%20”);