0

こんにちは、みんな。Sun Jersey Client API と Jesey Oauth を使用して Twitter に接続しようとしています。すでに oauth トークンとトークン シークレットを持っているとしましょう。

String accessToken = MY_TOKEN;
String accessTokenSecret = MY_TOKEN_SECRET;
String url = "http://twitter.com/statuses/update.xml";

// initialize the params and secret.
OAuthParameters params = initOAuthParams();
params.token(accessToken);
OAuthSecrets secrets = initOAuthSecrets();
secrets.tokenSecret(accessTokenSecret);

// now access the resource
OAuthClientFilter filter = getClientFilter(params, secrets);
WebResource resource = client.resource(url);
resource.addFilter(filter);

MultivaluedMapImpl form = new MultivaluedMapImpl();
String status = new String("test with spaces");
form.add("status", status);

// post it
resource.type("application/x-www-form-urlencoded").post(String.class, form);

このコードは機能しますが、スペースは「+」としてエンコードされます。通常はそれで問題ありませんが、Twitter では "%20" しか取得できないようです。投稿を置き換えようとすると

resource.type("application/x-www-form-urlencoded").post(String.class, "status=test with spaces");

また

resource.type("application/x-www-form-urlencoded").post(String.class, "status=test%20with%20spaces");

Twitter は 401、不正な署名で応答します。私がちょうどしようとすると

resource.type("application/x-www-form-urlencoded").post(String.class, "status=test");

ツイッターで受け付けます。「%20」としてエンコードされたスペースで Oauth を機能させるにはどうすればよいですか?

ありがとう!石工

4

1 に答える 1

0

これは jersey 1.3 で修正する必要があり ます https://jersey.dev.java.net/issues/show_bug.cgi?id=511 https://jersey.dev.java.net/issues/show_bug.cgi?id=433

しかし、同じ問題に直面しています。

シンプルな net.oauth.client.OAuthClient が仕事をします

于 2010-08-31T06:20:44.527 に答える