okhttp 客户端在 # 符号处截断 http URL

okhttp client truncates http URL at # sign

我正在使用 okhttp 客户端(版本 3.10.0)调用 Bing 服务。测试中使用的地址有#号。

1177 公园大道 STE 5 #190 橙园 佛罗里达州 320734150 美国

http 客户端截断 # 号处的地址部分。 URL通过代码构造的是

https://dev.virtualearth.net/REST/v1/Locations/1177%20PARK%20AVE%20STE%205?%20maxresults=1&key=XXXXXXXXXXXXXXXXXXXXXXX&o=xml

代码片段如下所示

Request.Builder builder = bingOkHttpClient.newRequestBuilder(path, buildQueryParams());
builder.addHeader("Accept","application/xml");
bingOkHttpClient.newCall(builder.build()).execute();

如果我用单词 suite 替换 #,那么 url 的构造是正确的

https://dev.virtualearth.net/REST/v1/Location1s/177%20PARK%20AVE%20STE%205%20suite#20190%ORANGE%20PARK%20FL%320734150%US?maxresults=1&key=XXXXXXXXXXXXXXXXXXXXX&o=xml

有没有其他方法可以使用 # 构造的 url 不被截断?

一些符号(包括“#”)是无效的 URL 符号。如果您的 URL 需要包含它们,则需要对它们进行编码。所以拿你原来的 URL 字符串并用方法 URLEncoder.encode(...) 编码这是 URLEncoder

的 Javadoc