需要传递get参数而不使用值而不使用“=”符号来使用外部API。网址是
http://example.com/Service/v1/service.ashx?methodName&name=val&blablabla
正如您所看到的,第一个参数是要在服务器上调用的方法(methodName)的名称,它没有任何值,也没有“=”。 我想以“正确”的方式形成参数,但目前形成如下:
List<NameValuePair> params = new LinkedList<NameValuePair>();
params.add(new BasicNameValuePair("name", "val"));
params.add(new BasicNameValuePair("name1", "val1"));
String paramString = URLEncodedUtils.format(params, "utf-8");
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(getEndpointUrl() + "?methodName&" + paramString);
问题出在使用串联的最后一行(而不是常规的params转换)。将“methodName”作为名称添加到params并将null作为值添加到结果URL中的“methodName =”。服务器不理解这种表示法。
答案 0 :(得分:5)
我认为你最好手动形成网址。我们广泛使用HttpGet方法,当我们构造URL字符串时,我们手动确保参数'正确性'。然后,我们使用HttpClient项目中的URIUtil来编码查询字符串:
// Start with your base method name, if necessary/known
String paramString = "methodName";
for (NameValuePair p : params ) {
String n = p.getName();
String v = p.getValue();
if ( v == null ) {
paramString += "&" + n;
} else {
paramString += "&" + n + "=" + v;
}
}
String url = "http://example.com/Service/v1/service.ashx?" + URIUtil.encodeQuery(paramString);
HttpGet get = new HttpGet(url);
答案 1 :(得分:1)
最好查看HttpClient源代码。从第一眼看,您需要继承HttpGet并覆盖getRequestLine方法以返回RequestLine接口的实现,该接口将以适当的方式格式化URL。
答案 2 :(得分:0)
您可以输入虚假值,而不是在服务器上检查它。
params.add(new BasicNameValuePair("methodName", "unused"));