3

Tumblr APIを利用する iOS アプリケーションでOAuthConsumerを使用しています。一般に、API 呼び出しを行うことは正常に機能します。ただし、メディアをアップロードするのに苦労しています。リクエストのすべてのパラメータが int または文字列の場合、次のように追加します。

    [request setParameters:[NSArray arrayWithObjects:
                        [OARequestParameter requestParameterWithName:@"x_auth_username" value:username],
                        [OARequestParameter requestParameterWithName:@"x_auth_password" value:password],
                        nil]];

それは明らかに、画像などでは機能しません。おそらくこのデータをmultipart/form-data代わりに送信する必要があることがわかったapplication/x-www-form-urlencodedので、oAuth署名には影響しません。ただし、私が知る限り、OAuthConsumer のみがサポートされていますx-www-form-urlencoded(関連するコードは にありますNSMutableURLRequest+Parameters.m)。ただし、これが正しいかどうかはわかりません。正しい場合は、Consumer正しく変更する方法がわかりません。どんな助けでも大歓迎です!

4

2 に答える 2

8

わかりました、私は自分でそれを理解しました。これにはいくつかの部分があり、他の人が同様の質問をしているのを見たので、全文を説明します。

まず、古いバージョンの OAuthConsumer を使用していました。Google Code にリンクされているバージョンを使用する代わりに、githubの最新バージョンを使用する必要があります。これには、複数の文字列を含むマルチパート フォームを送信する手段が含まれているためです。

さて、私が完全に間違っていなければ、理論的に今すべきことは次のとおりです。

//Setup the request...
[request setParameters:params];    
[request attachFileWithName:@"data" filename:@"photo.jpg" contentType:@"image/jpeg" data:dataProp.data];
//Setup the fetcher and send the request...

これにより、-変数のみを含む oAuth 署名が生成さoauth_...れ、他のすべての変数がマルチパート形式になります。これが本来あるべき姿であり、ドキュメントによると、問題ないはずです。残念ながら、そうではありません。tumblr は 401 エラーを返します。これは、署名が無効である可能性が高いためです。

これがあなたが本当にしなければならないことです:

//Setup the request...
[request setParameters:params];
[request prepare]; //Whaaaat?
[request attachFileWithName:@"data" filename:@"photo.jpg" contentType:@"image/jpeg" data:dataProp.data];
//Setup the fetcher, make sure "prepare" isn't called again, send the request...

これは機能します...繰り返しますが、これはoAuthがこれを処理する方法ではないと確信していますが、少なくとも機能します。

于 2012-04-18T20:14:46.857 に答える
1

Tumblr の OAuth の実装はかなり奇妙だと思います。認証とブログリクエストでOKな理由がわかりました(こちらをご覧ください)。私が知っているように、Tumblr は新しい OAuth ライブラリ ( this one ) でより適切に動作します。私自身、ShareKit との互換性のために古い OAuth ですべての作業を行うのに無駄な時間を費やしました。私が見つけた解決策は、ASIFormDataRequestを使用し、OAuth認証情報で署名することを提案しています(もともとここにありました)。はい、ハリネズミと草ヘビを交配させようとしているように見えますが、どういうわけか単一の画像では機能します。しかし、このコードを変更した後、複数の画像をアップロードできませんでした。別の解決策は"TumblrUploader"ですが、少し生々しすぎます。

于 2012-10-30T06:38:19.537 に答える