我試圖發送一個請求到使用管道字符在其URL site.com/page?param=|||
上的http請求管道符禁用編碼
發送同時使用Jsoup和URLConnection這個URL請求的URL會導致管字符編碼爲%7C,不過,該網站只接受未編碼|
。
我與小提琴手檢查,發現Web瀏覽器不編碼的管道字符,那麼爲什麼Java庫(URI類我猜)的編碼呢? 和有沒有辦法發送請求時,迫使(或禁用編碼該特定字符)?
我試圖發送一個請求到使用管道字符在其URL site.com/page?param=|||
上的http請求管道符禁用編碼
發送同時使用Jsoup和URLConnection這個URL請求的URL會導致管字符編碼爲%7C,不過,該網站只接受未編碼|
。
我與小提琴手檢查,發現Web瀏覽器不編碼的管道字符,那麼爲什麼Java庫(URI類我猜)的編碼呢? 和有沒有辦法發送請求時,迫使(或禁用編碼該特定字符)?
我有一個測試,並通過使用Jsoup
和URLConnection
發送請求,我注意到URLConnection
是不編碼的網址。這是我的測試代碼:
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
。這互聯網是HTTP數據包,而使用Jsoup
:
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不編碼。
,我期待方法connect
的FPGA實現在Jsoup
,發現關鍵代碼:
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 uri = new URI(u.getProtocol(), u.getUserInfo(), u.getHost(), u.getPort(), u.getPath(), u.getQuery(), u.getRef());
,並且沒有屬性來控制在Jsoup
編碼或不。
所以我覺得你可以使用URLConnection
而非Jsoup
。