HTMLから受け取った画像データAを解析中のapiにpostする処理をしています。
apiに送る画像データはエンコードタイプがmultipartです。
charlesを使用して解析しているapiのpost結果を見てみると
Content-Disposition: form-data; name="photo_1"; filename="photo_1.jpg" Content-Type: image/jpeg ~~~~以下データ内容~~~~~~~~~~~~~~~~~~~~~~~
となっています。
そこで
PHP
1// (main)---------------------------------------------- 2$headers = array( 3"Content-Type: multipart/form-data", 4 ); 5$data = array( 6'photo_1' => base64_encode(file_get_contents($upload_img)) 7 ); 8$result = PostCURL(’https://example.api.com/v1/upload?_access_token=XXXXXXXX’, $data, $headers); 9 10// (postcurl)------------------------------------------ 11function PostCURL($URL,$data,$headers){ 12 $ch = curl_init(); 13 14 curl_setopt($ch, CURLOPT_URL,$URL); 15 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 16 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 17 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 18 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 19 curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 20 curl_setopt($ch, CURLOPT_USERAGENT,$USER_AGENT); 21 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 22 curl_setopt($ch, CURLOPT_VERBOSE, true); 23 24 $response = curl_exec($ch); 25 $result = json_decode($response, true); 26 $errno = curl_errno($ch); 27 $error = curl_error($ch); 28 curl_close($ch); 29 30 return $result; 31}
と組んだのですが写真が正常にアップロードされませんでしたと返ってきます。
たぶん'photo_1' => base64_encode(file_get_contents($upload_img))の部分が引っかかっているように思えます。(file_get_contentsを使うと画像がmultipartじゃなくなるような気がする)
以上ご教授お願いします。
<追記>
apiのurlは
https://api.axluse.com/v1/jp/
です。
ロジックは画像のデーモンファイルとやらをapiで自動生成してくれるものです。
「写真が正常にアップロードされませんでした」というエラーを返している側のコードを提示いただけませんか?
どういう条件でそのメッセージが返っているのかを確認したいのですが。
当方ではapiのコードは持ち合わせていないので一通りやれる方法を片っ端からやっていくつもりです。
現行の調査の段階で分かっていることとして、
・エンコードタイプはmultipart
・upload可能画像データは縦横612pxのjpgのみ
・imgのContent-Typeはimage/jpeg
・imgのname="photo_1";filename="photo_1.jpg"固定
・Boundary形式が使われている
以上5点です。
これらに相当するpostの方法を知っているだけ教えていただければ試してみてその結果を見ながら解析していきたいです。
利用するAPIの仕様書的なモノもないという事ですか?
それは正規に利用権限のあるAPIなのでしょうか。。
apiのサーバーは稼動していますが、著作主はapiを自由に解析して使ってもいいと明記されているだけのapiです。apiサーバー側はphp5.1のみ記載があります。
ちなみにイギリスのサーバーなのでpostできないとか...あるんでしょうかね...
書き忘れましたが仕様書は一切ありません。
自由に使っていいのであれば、そのURLを教えていただけますか
>イギリスのサーバーなのでpostできない
訂正します。画像のデータのみpostがうまくいっていないようです。画像データを送らないコンテンツはうまく送信できているようなのですが、やはり画像データのpost方法が間違っているようです。
apiのRequestを発行するURLではなく、最低限の説明のあるページが見たいのですが、そういうのはないのでしょうか。
メールのみでの対応になっていると思います。
info@axluse.comで質疑が聞けると思います。
すみません、どうにも怪しいので降ります。度々対応いただいたのにすみません。他の回答者さんを待つか、そのメールアドレス宛に質問してください。
いえいえ、ありがとうございます。こちらも興味があったのでやっているような感じなので(笑
どうもありがとうございました
回答2件
あなたの回答
tips
プレビュー