2011-09-05 2 views
1
제가 아파치 HTTP-구성 요소 (4.1.2)

HttpComponents

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 구성 요소와 똑같은 매개 변수를 가지고 있습니다.

아마도 내가 뭔가 잘못하고 있습니다.

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 넣어 경우,하지만 HttpCoponents와, 작동 : 같은

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

포스트 PARAMS 보인다. 누군가 왜 그 이유를 설명 할 수 있습니까?

미리 감사드립니다

답변

2

봅니다 헤더를 추가 "응용 프로그램/x-www-form-urlencoded를"당신의 HttpRequest를


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

희망에 있지만 도움이되지 않습니다

+0

감사를 작동합니다 – tbruyelle

+0

UrlEncodedFormEntity 대신 StringEntity를 사용해 보셨습니까? – momo

+0

그래, StringEntity를 사용하면 아무것도 변경되지 않습니다, 내 문제는 인코딩과 관련이없는 것 같습니다. 내 질문을 업데이트합니다. – tbruyelle