1

我想用 Apache http-components (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 需要字符串string-keys参数作为数组,这意味着对每个参数重复strings[]string-keys[]

此 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 参数看起来像:

POST params : project=Test&string-keys%5B%5D=test.one&strings%5B%5D=TestOne&string-keys%5B%5D=test.two&strings%5B%5D=TestTwo

如果我将它们放在 curl 中的 --data 后面,它可以工作,但不能与 HttpCoponents 一起使用。有人可以解释我为什么吗?

提前致谢

4

1 回答 1

2

尝试在您的 httpRequest 中添加标题“application/x-www-form-urlencoded”


    httpRequest.addHeader("content-type", "application/x-www-form-urlencoded");
    HttpResponse response = new DefaultHttpClient().execute( httpRequest );

希望这会奏效

于 2011-09-05T14:53:25.613 回答