2013-02-14 26 views
0

我需要一個端點的「authenticity_token」這是在像格式:的Java的Apache了HTTPClient不編碼POST實體

Iq2rNXN+OxERv+s6TSloJfKkPZVvqnWe1m0NfODB5OI= 

但是,它也有「特」字,如:

E7IzeP73OgPGgXM/up295ky1mMQMio2Nb8HMLxJFyfw= 

這被編碼爲:

E7IzeP73OgPGgXM%26%2347%3Bup295ky1mMQMio2Nb8HMLxJFyfw%3D 

出於某種原因,端點不喜歡編碼Ø f那些特殊字符會認爲該標記無效。是否可以添加不編碼特定值的POST變量?我目前正在做這樣的事情:

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

您可以隨時使用的UrlEncodedFormEntityByteArrayEntityStringEntity,而不是和自己做的編碼。它應該看起來像foo=var1&bar=var2
您必須設置Content-Type=application/x-www-form-urlencoded
您可能需要了解您的端點期望作爲Content-Type標頭的application/x-www-form-urlencoded值的字符集參數。然後將其作爲參數傳遞給UrlEncodedFormEntity構造函數。這應該是正確的解決方案。

+0

問題是,id喜歡使用其餘參數的UrlEncodedFormEntity,我只需要能夠使authenticity_token不被編碼... – wuntee 2013-02-15 01:10:07

+0

只需使用第一個選項:ByteArrayEntity或StringEntity with Content-Type =應用/ X WWW的窗體-urlencoded。 UrlEncodedFormEntity完成此操作,但它爲您編碼參數。 – jdb 2013-02-15 01:20:29

相關問題