2011-08-17 10 views
1

私はPhotobucket APIを使用しようとしています。私はjavascriptでUIを書くことを計画しており、基本的にPhotobucketサーバーへのプロキシとして動作するサーバーへのAJAX呼び出しを使用します。私は自分のPhotobucket API consumer_secretが開いていないように、サーバーをプロキシとして使用しています。しかし、PHPを使用して写真をアップロードする際に問題が発生しています。私は、アルバムの追加や削除などの認証されたものを含め、APIから他のメソッドを取得することができました。私はPHPでファイルのアップロードをやったことがないが、私はここにポストのいくつかを読んで、ウェブ上のさまざまな他の場所Photobucketへの写真のアップロード

http://pic.pbsrc.com/dev_help/WebHelpPublic/Content/Methods/Album/Upload%20Media%20to%20an%20Album.htm

http://pic.pbsrc.com/dev_help/WebHelpPublic/Content/Examples/Uploading%20Media.htm

を参照してきました。基本的に私は、私のサーバー上のPHPスクリプトにユーザー、アルバム名、ファイルを投稿するhtml形式のテストページを持っています。フォームはmultipart/form-dataとしてエンコードされます。

POST要求が自分のサーバー上のページに送信されたとき。私のサーバはユーザセットのトークンを検索し、基本的なoauthパラメータを設定します。次に、oauthに必要なすべてのことを、他の方法(すべてが動作するもの)でどのように行うのかとまったく同じです。

oauthシグネチャを生成するときに、基本文字列からuploadfileパラメータを除外し、POSTメソッドを使用しています。私uploadfileパラメータのために私はその後、私はそう

$ch = curl_init($url.$resource); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $params); // Note $params is an array 

$response = curl_exec($ch); 

curl_close($ch); 

のようなカール要求は私も後に、しかし

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible);'); 

に追加しようとしたセットアップ以下

$params['uploadfile']= '@'.$_FILES['file']['tmp_name'];

を使用しますこのPhotobucketのすべてが戻ってきて、「認証に失敗しました署名チェックに失敗しました」と表示されます

私は私のベースの文字列を見て、それは正常に見えます。ここに例があります。私は、さまざまなトークンの実際の値アウト、編集:

POST&http%3A%2F%2Fapi.photobucket.com%2Falbum%2Fusername%2Fupload&format%3Djson%26oauth_consumer_key%3D00000%26oauth_nonce%3D1313541553TcVIpWJ18WxEZeXO%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1313541553%26oauth_token%3D000000%26oauth_version%3D1.0%26title%3Dtitle%26type%3Dimage 

を私が言ったように、それが正常に見えると私は「他のいずれかの方法で問題がないので、私はその私のベース文字列に問題があることを考えていません私は試しました。私はカールが2つの理由でデータを送信する方法に問題があると思います。

1)私は、削除要求を行うことをしようとしたとき、私は最初のアルバムを削除すると問題を抱えていた、と私は同様のエラーを持って、私は単純に追加パラメータを指定してPOSTリクエストをしたときただし、_method=DELETEすべてが

罰金働きました

2)これは私が、私はそれが何かだと思っているだろうとの問題を持っていたし、これまでのところ、それが送信されるデータを必要とする唯一の方法です

マルチパート/フォームデータとしてエンコードされた唯一の方法であり、私がuploadfileパラメータを割り当てているやり方とは関係ないが、シグネチャとドキュメントだけがそのパラメータをベース文字列の外に残すと言っているだけではファイルについては不平を言っていない。

誰もが考えていますか?今私はいくつかのcurl_setoptが欠けていると思っています。

参考リンクの例に送られたリクエストを比較したいが、私はCurlリクエストの本文を見る方法がわからない(ヘッダーを見ることができ、multipart/form-dataと言う)

答えて

1

私は、multipart/form-data投稿が生のURLをエンコードする必要がないことを認識しませんでした。パラメータのエンコードをやめると、すべてが期待通りに機能しました。

+0

こんにちは、完全なPHPコードを教えていただけますか? PHPを使ってPhotobucketに画像をアップロードする必要があります。ありがとうございました – Jay

関連する問題