0

次のような形式の「authenticity_token」を必要とするエンドポイントがあります。

Iq2rNXN+OxERv+s6TSloJfKkPZVvqnWe1m0NfODB5OI=

ただし、次のような「特殊な」文字が含まれる場合があります。

E7IzeP73OgPGgXM/up295ky1mMQMio2Nb8HMLxJFyfw=

これは次のようにエンコードされます。

E7IzeP73OgPGgXM%26%2347%3Bup295ky1mMQMio2Nb8HMLxJFyfw%3D

何らかの理由で、エンドポイントはこれらの特殊文字のエンコーディングを好まないため、トークンが無効であると見なします。特定の値をエンコードしない 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));
4

1 に答える 1

2

いつでも、ByteArrayEntityまたはStringEntity代わりにUrlEncodedFormEntity、自分でエンコードを行うことができます。のようになりますfoo=var1&bar=var2
設定する必要がありますエンドポイントがContent-TypeヘッダーContent-Type=application/x-www-form-urlencoded
の値の文字セットパラメーターとして何を期待しているかを調べたい場合があります。application/x-www-form-urlencoded次に、それをパラメーターとしてUrlEncodedFormEntityコンストラクターに渡します。これは正しい修正であるはずです。

于 2013-02-15T00:08:59.407 に答える