ネットワークプログラミングは初めてです。ドロップボックスでOAuth1.0に基づいてPOSTリクエストを作成しようとしています。以下は、私がポストリクエストを行うために使用したコードですが、それは私がそれを行うことになっている方法ですか?
HttpPost httpPost;
Log.d("HTTP","Exec");
httpPost = new HttpPost("https://api.dropbox.com/1/shares/dropbox/a.jpg");
Log.d("HTTP","Execute");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(9);
nameValuePairs.add(new BasicNameValuePair("oauth_consumer_key", "2f2y1dyuqhp58ek"));
nameValuePairs.add(new BasicNameValuePair("oauth_token", token));
nameValuePairs.add(new BasicNameValuePair("oauth_nonce", String.valueOf(millis)));
nameValuePairs.add(new BasicNameValuePair("oauth_timestamp", String.valueOf(millis)));
nameValuePairs.add(new BasicNameValuePair("oauth_signature_method", "HMAC-SHA1"));
nameValuePairs.add(new BasicNameValuePair("oauth_version", "1.0"));
nameValuePairs.add(new BasicNameValuePair("oauth_signature", sw));//this is url encoded
//nameValuePairs.add(new BasicNameValuePair("path", "/a.jpg"));
//nameValuePairs.add(new BasicNameValuePair("root", "dropbox"));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
Log.d("HTTP","requesting");
HttpResponse response = httpclient.execute(httpPost);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
String result;
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
line = reader.readLine();
sb.append(line);
result = sb.toString();
is.close();
//String s=response.getEntity().getContent().;
Log.d("resp", result);
//tv.setText(response.toString());
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
署名の基本文字列は次のとおりです。
POST&https%3A%2F%2Fapi.dropbox.com%2F1%2Fshares%2Fdropbox%2Fa.jpg&oauth_consumer_key%3D2f2y1dyuqhp58ek%26oauth_nonce%3D1340729641%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1340729641%26oauth_token%3Dwz27t6thob0fbxl%26oauth_version%3D1.0
T問題が何であるかについての手がかりはありますか?私が得ている応答は、logCatに表示される「無効な署名ベース文字列」です。
LogCat:
06-26 22:30:46.125: I/System.out(364): debugger has settled (1322)
06-26 22:30:49.203: I/ActivityManager(66): Displayed activity cloud.mobile/.MCActivity: 9393 ms (total 9393 ms)
06-26 22:30:49.243: W/ActivityManager(66): Launch timeout has expired, giving up wake lock!
06-26 22:30:57.124: D/HTTP(364): wz27t6thob0fbxl
06-26 22:30:59.197: D/HTTP(364): Exe
06-26 22:30:59.886: D/HTTP(364): 1340730059
06-26 22:31:00.824: D/HTTP(364): POST&https%3A%2F%2Fapi.dropbox.com%2F1%2Fshares%2Fdropbox%2Fa.jpg&oauth_consumer_key%3D2f2y1dyuqhp58ek%26oauth_nonce%3D1340730059%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1340730059%26oauth_token%3Dwz27t6thob0fbxl%26oauth_version%3D1.0
06-26 22:31:00.824: D/HTTP(364): xLNJrQ5R9jxDTnZcpQ3HLkLBxxQ=
06-26 22:31:00.973: D/HTTP(364): Exe
06-26 22:31:00.983: D/HTTP(364): Exec
06-26 22:31:01.023: D/HTTP(364): Execute
06-26 22:31:01.664: D/HTTP(364): requesting
06-26 22:31:12.243: D/dalvikvm(364): GC_FOR_MALLOC freed 5195 objects / 296968 bytes in 185ms
06-26 22:31:25.063: I/global(364): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
06-26 22:31:28.545: D/resp(364): {"error": "Invalid signature. Expected signature base string: POST&https%3A%2F%2Fapi.dropbox.com%2F1%2Fshares%2Fdropbox%2Fa.jpg&oauth_consumer_key%3D2f2y1dyuqhp58ek%26oauth_nonce%3D1340730059%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1340730059%26oauth_token%3Dwz27t6thob0fbxl%26oauth_version%3D1.0"}
さて、この「予想される署名ベース文字列(上に表示)」は、HMAC-SHAHを使用して生成してoauth_signatureに変換したものとまったく同じです。何かが足りませんか?