有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓阻止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) 个答案

  1. # 1 楼答案

    在URL中,?之后的部分是查询字符串,而#之后的部分是片段标识符,正如您已经指出的那样

    当查询字符串被发送到服务器时,片段标识符is not,因此尝试发送一个是没有意义的

    2种可能性:

    • 如果它一个片段标识符,那么你不需要发送它,Android的行为(规范化URL)是正确的。剥离尾随的?(空查询字符串)不应该是问题,因为它单独(对于服务器和客户端)没有意义。如果您想在客户端代码中保留片段,那么您需要创建一个URI,使用它在任何地方显示,然后在需要与服务器对话时,使用toURL()转换为URL

    • 如果它不是一个片段标识符,那么它应该是查询字符串的一部分,所以你需要发送一个哈希符号作为URL的一部分:在这种情况下,你需要将它URL编码到^{,在?之后的部分不会被剥离,服务器将知道如何处理编码的%23