Java 在http请求中禁用管道字符的编码

Java 在http请求中禁用管道字符的编码,java,http,jsoup,Java,Http,Jsoup,我正在尝试向一个URL发送一个请求,该URL在其URL中使用管道字符 site.com/page?param=| | | 使用Jsoup和URLConnection向此URL发送请求会导致管道字符编码为%7C,但是,站点只接受未编码的 我与fiddler进行了检查,发现Web浏览器没有对管道字符进行编码,那么为什么java库(我猜是URI类)必须对其进行编码呢? 在发送请求时是否有办法强制(或禁用该特定字符的编码) 我有一个测试,通过使用Jsoup和URLConnection发送请求,我注意到U

我正在尝试向一个URL发送一个请求,该URL在其URL中使用管道字符
site.com/page?param=| | |

使用Jsoup和URLConnection向此URL发送请求会导致管道字符编码为%7C,但是,站点只接受未编码的

我与fiddler进行了检查,发现Web浏览器没有对管道字符进行编码,那么为什么java库(我猜是URI类)必须对其进行编码呢?
在发送请求时是否有办法强制(或禁用该特定字符的编码)

我有一个测试,通过使用
Jsoup
URLConnection
发送请求,我注意到
URLConnection
没有对url进行编码。这是我的测试代码:

Connection jsoupConnection = Jsoup.connect("http://www.baidu.com/page?param=|||");
Document document = jsoupConnection.get();
URL url=new URL("http://www.baidu.com/page?param=|||");
URLConnection urlConnection = url.openConnection();
InputStream input = urlConnection.getInputStream();
byte[] entity = ByteStreams.toByteArray(input);
我用
WireShark
监控互联网。这是使用
Jsoup
时的http数据包:

10  0.011680000 192.168.78.128  115.239.210.27  HTTP    357 GET /page?param=%7C%7C%7C HTTP/1.1
这是
URLConnection

27  0.128714000 192.168.78.128  115.239.210.27  HTTP    220 GET /page?param=||| HTTP/1.1
因此,在使用
URLConnection
时,不会对Url进行编码

我在
Jsoup
中查看了方法
connect
的实现,找到了关键代码:

private static URL encodeUrl(URL u) {
    try {
        //  odd way to encode urls, but it works!
        final URI uri = new URI(u.getProtocol(), u.getUserInfo(), u.getHost(), u.getPort(), u.getPath(), u.getQuery(), u.getRef());
        return new URL(uri.toASCIIString());
    } catch (Exception e) {
        return u;
    }
}
url在
final URI=new URI(u.getProtocol()、u.getUserInfo()、u.getHost()、u.getPort()、u.getPath()、u.getQuery()、u.getRef())中编码,并且在
Jsoup
中没有控制编码与否的属性

因此,我认为您可以使用
URLConnection
而不是
Jsoup