安卓阻止java。网删除“”的URL如果没有查询参数
我试图使用java.net.HttpURLConnection
来请求一个URL,如下所示:
https://example.com/app/?#/something=else&someting2=else2
为了做到这一点,我需要构造一个java。网url,但构造函数去掉了问号“?”:
java.net.URL url = new URL("https://example.com/app/?#/something=else&someting2=else2");
String string = url.toString();
// String is https://example.com/app/#/something=else&someting2=else2
当我创建与url.openConnection()
的连接时,我只得到一个404
我明白它为什么会这样。它严格地将散列#之后的所有内容都识别为url片段,这意味着实际的url变成https://example.com/app/?
。然后,它就去掉了后面的问号。但我需要URL按原样呈现。
这是一款Android应用
如何强制HTTPUrlConnection在URL中使用问号发出GET请求
# 1 楼答案
在URL中,
?
之后的部分是查询字符串,而#
之后的部分是片段标识符,正如您已经指出的那样当查询字符串被发送到服务器时,片段标识符is not,因此尝试发送一个是没有意义的
2种可能性:
如果它是一个片段标识符,那么你不需要发送它,Android的行为(规范化URL)是正确的。剥离尾随的
?
(空查询字符串)不应该是问题,因为它单独(对于服务器和客户端)没有意义。如果您想在客户端代码中保留片段,那么您需要创建一个URI
,使用它在任何地方显示,然后在需要与服务器对话时,使用toURL()
转换为URL
如果它不是一个片段标识符,那么它应该是查询字符串的一部分,所以你需要发送一个哈希符号作为URL的一部分:在这种情况下,你需要将它URL编码到^{,在
?
之后的部分不会被剥离,服务器将知道如何处理编码的%23