URL формы HttpClient, содержащий параметр без значения - PullRequest
0 голосов
/ 09 ноября 2011

Необходимо использовать параметр get без значения и без символа "=" для использования внешнего API. URL-адрес

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

Проблема в последней строке, где используется конкатенация (вместо обычного преобразования параметров). Добавление «methodName» в качестве имени к params и null в качестве значения дает «methodName =» в результирующем URL. Сервер не понимает такие обозначения.

Ответы [ 3 ]

5 голосов
/ 09 ноября 2011

Я думаю, вам лучше сформировать URL вручную.Мы широко используем методы HttpGet, и когда мы создаем строки URL, мы делаем это вручную, чтобы обеспечить корректность параметра.Затем мы используем URIUtil из проекта HttpClient для кодирования строки запроса:

// 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 голос
/ 09 ноября 2011

Лучше всего просмотреть источники HttpClient. На первый взгляд кажется, что вам нужно создать подкласс HttpGet и переопределить метод getRequestLine, чтобы вернуть реализацию интерфейса RequestLine, который соответствующим образом отформатирует URL.

0 голосов
/ 09 ноября 2011

Вы можете ввести поддельное значение и не проверять его на сервере.

params.add(new BasicNameValuePair("methodName", "unused"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...