Как опубликовать параметры массива с HttpComponents
Я хочу выполнить эту команду с http-компонентами Apache (4.1.2)
curl --data "strings[]=testOne&string-keys[]=test.one&strings[]=testTwo&string-keys[]=test.two&project=Test" https://api.foo.com/1/string/input-bulk
Целевому API необходимы параметры строки и строковых ключей в виде массива, что означает повторение строк [] и строковых ключей [] для каждого параметра.
Эта команда curl работает нормально, но с Http-компонентом, в то время как у меня точно такие же параметры.
Может я что то не так делаю.
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add( new BasicNameValuePair( "project", PROJECT_NAME ) );
for ( Entry entry : newEntries )
{
params.add( new BasicNameValuePair( "string-keys[]", entry.getKey() ) );
params.add( new BasicNameValuePair( "strings[]", entry.getValue() ) );
params.add( new BasicNameValuePair( "context[]", "" ) );
}
URI uri = URIUtils.createURI( "https", "api.foo.com", -1, "/1/string/input-bulk", null, null );
UrlEncodedFormEntity paramEntity = new UrlEncodedFormEntity( params );
logger.info( "POST params : {}", EntityUtils.toString( paramEntity ) );
HttpPost httpRequest = new HttpPost( uri );
httpRequest.setEntity( paramEntity );
HttpResponse response = new DefaultHttpClient().execute( httpRequest );
POST params выглядит так:
POST params : project=Test&string-keys%5B%5D=test.one&strings%5B%5D=TestOne&string-keys%5B%5D=test.two&strings%5B%5D=TestTwo
Если я положу их за --data в curl, это работает, но не с HttpCoponents. Может кто-нибудь объяснить мне, почему?
заранее спасибо
1 ответ
Попробуйте добавить заголовок "application/x-www-form-urlencoded" в ваш httpRequest
httpRequest.addHeader("content-type", "application/x-www-form-urlencoded");
HttpResponse response = new DefaultHttpClient().execute( httpRequest );
Надеюсь, это сработает