33

使用 Apache 的 commons-httpclient for Java,将查询参数添加到 GetMethod 实例的最佳方法是什么?如果我使用 PostMethod,它非常简单:

PostMethod method = new PostMethod();
method.addParameter("key", "value");

不过,GetMethod 没有“addParameter”方法。我发现这有效:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString(new NameValuePair[] {
    new NameValuePair("key", "value")
});

但是,我见过的大多数示例要么将参数直接硬编码到 URL 中,例如:

GetMethod method = new GetMethod("http://www.example.com/page?key=value");

或硬编码查询字符串,例如:

GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString("?key=value");

这些模式之一是首选吗?为什么 PostMethod 和 GetMethod 之间的 API 存在差异?所有其他 HttpMethodParams 方法打算用于什么?

4

3 回答 3

22

Post 方法有 post 参数,但get 方法没有

查询参数嵌入在 URL 中。当前版本的 HttpClient 在构造函数中接受一个字符串。如果你想添加上面的键值对,你可以使用:

String url = "http://www.example.com/page?key=value";
GetMethod method = new GetMethod(url);

可以在Apache Jakarta Commons 页面上找到一个很好的入门教程。

更新:正如评论中所建议的,NameValuePair 有效。

GetMethod method = new GetMethod("example.com/page"); 
method.setQueryString(new NameValuePair[] { 
    new NameValuePair("key", "value") 
}); 
于 2008-10-19T22:49:23.973 回答
18

这不仅仅是个人喜好问题。这里的相关问题是对参数值进行 URL 编码,以便这些值不会被损坏或被误解为额外的分隔符等。

与往常一样,最好详细阅读 API 文档: HttpClient API 文档

阅读本文,您可以看到它setQueryString(String)不会对您的参数和值进行 URL 编码或分隔,而setQueryString(NameValuePair[])会自动对您的参数名称和值进行 URL 编码和分隔。当您使用动态数据时,这是最好的方法,因为它可能包含与号、等号等。

于 2010-08-09T19:08:09.193 回答
10

试试这种方式:

    URIBuilder builder = new URIBuilder("https://graph.facebook.com/oauth/access_token")
            .addParameter("client_id", application.getKey())
            .addParameter("client_secret", application.getSecret())
            .addParameter("redirect_uri", callbackURL)
            .addParameter("code", code);

    HttpPost method = new HttpPost(builder.build());
于 2012-10-23T15:10:04.833 回答