HttpClient表单URL包含没有值的参数

Art*_*emm 0 java web-services httpclient

需要传递没有值的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);
Run Code Online (Sandbox Code Playgroud)

问题出在使用串联的最后一行(而不是常规的params转换).将"methodName"作为名称添加到params并将null作为值添加到结果URL中的"methodName =".服务器不理解这种表示法.

Jas*_*rel 5

我认为你最好手动形成URL.我们广泛使用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);
Run Code Online (Sandbox Code Playgroud)