如何在java中构建网址?

2022-09-01 00:51:12

我正在用StringBuilder构建一个字符串

StringBuilder builder = new StringBuilder();
builder.append("my parameters");
builder.append("other parameters");

然后我建立一个网址

Url url = new Url(builder.toString());

然后我尝试连接

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

但是从我得到的结果来看,网址似乎不对。这就像某个参数被错误地传递了。这就是为什么我认为问题出在StringBuilder的部分。

问题在于我试图传递的双精度参数。

double longitude = 23.433114;
String lng = String.ValueOf(longitude);

然后我把它放在网址中。但是,如果我将其作为字符串给出,则结果是正确的。

String lng = "23.433114"

UrlEncoding是必要的吗?我将尝试下面建议的内容。


答案 1

试试 apache 的 : [文档URIBuilder]

import org.apache.http.client.utils.URIBuilder;

// ...

URIBuilder b = new URIBuilder("http://example.com");
b.addParameter("t", "search");
b.addParameter("q", "apples");

Url url = b.build().toUrl();

Maven dependency:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.1</version>
</dependency>

答案 2

由于您希望创建 URL 并通过 GET 请求使用它,因此最好使用在此过程中为您提供帮助的库。您可以使用HttpComponents或其他库,如Unirest,它建立在HttpComponents之上,可以简化所有这些工作。

下面是使用 Unirest 的示例:

HttpResponse<String> stringResponse = Unirest.get("https://www.youtube.com/results")
    .field("search_query", "eñe")
    .asString();
System.out.println(stringResponse.getBody());

这将使用 检索与youtube上搜索的所有结果相对应的HTML响应。该字符将为您编码。"eñe"ñ

免责声明:我绝不依附于Unirest。我不是这个项目的开发者或赞助商。我只是这个框架的快乐用户。