Java 在http请求中禁用管道字符的编码
我正在尝试向一个URL发送一个请求,该URL在其URL中使用管道字符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
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