2013-02-14 1 views
0

을 인코딩하지 않는 I가 필요로하는 엔드 포인트 같은 형식입니다 'authenticity_token'자바 아파치 HttpClient를가 POST 엔티티

그러나
Iq2rNXN+OxERv+s6TSloJfKkPZVvqnWe1m0NfODB5OI= 

, 때로는이 같은 "특별한"문자 :

E7IzeP73OgPGgXM/up295ky1mMQMio2Nb8HMLxJFyfw= 

이 가에 인코딩됩니다 : 어떤 이유로

E7IzeP73OgPGgXM%26%2347%3Bup295ky1mMQMio2Nb8HMLxJFyfw%3D 

, 엔드 포인트는 인코딩 O를 좋아하지 않는다 이 특수 문자는 토큰이 유효하지 않다고 생각합니다. 특정 값을 인코딩하지 않는 POST 변수를 추가 할 수 있습니까? 당신은 항상 ByteArrayEntity 또는 StringEntity 대신 UrlEncodedFormEntity의 사용 인코딩을 직접 할 수

HttpPost post = new HttpPost(URL + NEW_FINDING); 
    List <NameValuePair> nvps = new ArrayList <NameValuePair>(); 
    nvps.add(new BasicNameValuePair("foo", foo)); 
    nvps.add(new BasicNameValuePair("authenticity_token", authenticityToken)); 
    post.setEntity(new UrlEncodedFormEntity(nvps)); 

답변

2

: 나는 현재 같은 일을하고있다. 그것은 foo=var1&bar=var2과 비슷한 모양이어야합니다.
Content-Type=application/x-www-form-urlencoded
application/x-www-form-urlencoded Content-Type 헤더 값의 charset 매개 변수로 예상되는 엔드 포인트를 확인할 수 있습니다. 그런 다음 UrlEncodedFormEntity 생성자에 매개 변수로 전달합니다. 이것은 올바른 수정이어야합니다.

+0

문제는 ID가 나머지 매개 변수에 대해 UrlEncodedFormEntity를 사용하는 것과 같습니다. 단지 authenticity_token을 인코딩 할 필요가 있습니다. – wuntee

+0

다음 첫 번째 옵션을 사용하십시오. ByteArrayEntity 또는 StringEntity with Content-Type = application/x-www-form-urlencoded. UrlEncodedFormEntity는 정확히 이것을 수행하지만 매개 변수를 인코딩합니다. – jdb