如何将查询参数添加到GetMethod(使用Java commons-httpclient)?

2022-09-01 08:49:31

使用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方法都打算用于什么?


答案 1

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") 
}); 

答案 2

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

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

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


推荐