Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java URL:无效查询_Java_Url - Fatal编程技术网

Java URL:无效查询

Java URL:无效查询,java,url,Java,Url,我的程序因格式化错误的URL查询而崩溃。 我使用以下方法来解析它 public GetMethod get(String uri) throws IOException { URL url = new URL(uri); ProtocolSocketFactory factory = getFactory(url.getProtocol()); Protocol protocol = new Protocol(url.getProtocol(),

我的程序因格式化错误的URL查询而崩溃。 我使用以下方法来解析它

public GetMethod get(String uri) throws IOException {
        URL url = new URL(uri);
        ProtocolSocketFactory factory = getFactory(url.getProtocol());
        Protocol protocol = new Protocol(url.getProtocol(), factory, url.getPort());
        httpClient.getHostConfiguration().setHost(url.getHost(), url.getPort(), protocol);

        GetMethod getMethod = new GetMethod(url.getPath() + "?" + url.getQuery());
        httpClient.executeMethod(getMethod);

        return getMethod;
    }
uri可以包含以下内容,例如:

HH:mm:ss&NumberFormat=#,######:,&UserCurrency=EUR&ClientBrowserAddress=0.0.0

当我进入方法的构造函数并执行url.getQuery()时,我收到以下消息:

用户名=演示和权限=AC%2CAD%2CAR%2CAS%2CBP%2CBPA%2CBPS%2CDashboard%2CID%2CLUA%2CMA%2CME-IN%2CME-OUT%2CMEA-IN%2CMEA-IN%2CMES-IN%2CMES-OUT%2CMPC%2CREP%2CSF%2CUA%2CUPA%2CUPP和数据所有者=1,10,7,3,8,12,15,16,4,5,14,9,11,17,6,13,2&格式=年月日 HH:mm:ss和数字格式=

在我的号码表之后,一切都被删除了。这是怎么来的

更新

我将所有#替换为%23,现在我有以下方法:

public GetMethod get(String uri) throws IOException {
        uri = uri.replaceAll("#","%23");
        URL url = new URL(uri);
        ProtocolSocketFactory factory = getFactory(url.getProtocol());
        Protocol protocol = new Protocol(url.getProtocol(), factory, url.getPort());
        httpClient.getHostConfiguration().setHost(url.getHost(), url.getPort(), protocol);

        GetMethod getMethod = new GetMethod(url.getPath() + "?" + url.getQuery());
        httpClient.executeMethod(getMethod);

        return getMethod;
    }
当我编码我的url时,我得到以下结果:

14:09:22027错误 [org.apache.catalina.core.ContainerBase.[jboss.web].[default host].[trax].[default]] (http-/0.0.0:8080-2)JBWEB000236:Servlet.service()用于Servlet 默认引发异常:java.lang.IllegalArgumentException:无效 uri “/Trax Logi Reports/rdTemplate/rdGetSecureKey.aspx?Username=demo&Rights=AC%2CAD%2CAR%2CAS%2CBP%2CBPA%2CBPS%2CDashboard%2CID%2CLUA%2CMA%2CME-IN%2CME-IN%2CMES-IN%2CMES-OUT%2CMPC%2CREP%2CSA%2CSF%2CUA%2CUPA%2CUPA%2CUPS&DataOwner=1,10,7,3,3,8,12,15,16,4,5,14,9,11,11,11,11,12,12,12,12,16,16,16,16,14,11,11,11,11,11,11,12,11,11,11,11,12,12,12,12,12,16,12,16,12,11,11,11,11,11, HH:mm:ss&NumberFormat=%23,%23%230.%23%23&UserCurrency=EUR&ClientBrowserAddress=0.0.0': 无效查询


怎么了?我什么也看不到。

这是因为&和#是URL中具有某种意义的特殊字符:

  • &
    用于将参数彼此分离

  • #
    表示文件中的本地链接——该链接不会传递到服务器,但会在客户端(通常由浏览器)进行评估

将您的
#
编码为
%23
,您将看到更多信息

您还应该考虑使用适当的调用逐个设置PARAM:

 GetMethod getMethod = new GetMethod(url.getPath());
 getMethod.getParams().setParameter("Username", "demo");

依此类推

使用URLEncoder.encode对新URL的纯文本字符串进行编码(“/Trax Logi Reports”),由于未指定协议,您将收到格式错误的异常。请更详细地描述您的控制流程。哪个部分由哪个URL调用?在DateTimeFormat中,yyyy和HH之间似乎有一个空格。URL/URI中不允许有空格。将其编码为%20(与任何其他不允许的字符一样)或+(加号;查询aka参数中空格的特殊情况)请参见..我也对其进行了编码,谢谢,但现在我得到:java.lang.IllegalArgumentException:无效uri“/Logi Reports/rdTemplate/rdGetSecureKey.aspx?Username=demo&Rights=AC%2CAD%2CAR%2CAS%2CBP%2CBPA%2CBPS%2CDashboard%2CID%2CLUA%2CMA%2CME-OUT%2CMEA-IN%2CMEA-OUT%2CMES-OUT%2CMPC%2CREP%2CSA%2CSF%2CUA%2CUPA%2CUPA%2CUPS&DataOwner=1,10,7,3,8 12,15,16,4,14,9,11,6,11,11,11,12,12,15,16,16,16,14,11,11,11,12,12,12,12,11,16,12,14,11,12,12,14,12,14,11,12,12,12,11,11,12,16,14,12,13,HH:mm:ss&NumberFormat=%23,%23%230.%23%23&UserCurrency=EUR&ClientBrowserAddress=0.0.0':无效查询从何处获取?您在服务器中看到了什么?