前提・実現したいこと
PHPで、APIに接続を試しています。
ローカル環境(Windows10、XAMMP)で試したところ正常に接続できたのですが、
サーバー(ロリポップ)にあげたところ接続できません。
発生している問題・エラーメッセージ
ローカル環境では正常に動作し、APIから値の取得ができました。
サーバー環境ではトークンの取得までできたのですが、その後の動作で401エラーが出ました。
{"errorType":"string","errorMessage":"{"status":401,"message":"Unauthorized."}","trace":[]}
該当のソースコード
php
1<?php 2 3//トークンの取得 4 5$ch = curl_init(); 6 7curl_setopt($ch, CURLOPT_URL, 'https://エンドポイント/get_token'); 8curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 9curl_setopt($ch, CURLOPT_POST, 1); 10curl_setopt($ch, CURLOPT_POSTFIELDS, {"userName": "ユーザー名", "password": "パスワード"} ); 11 12$headers = array(); 13$headers[] = 'Content-Type: application/json'; 14curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 15 16$result = curl_exec($ch); 17if (curl_errno($ch)) { 18 echo 'Error:' . curl_error($ch); 19} 20curl_close($ch); 21 22$json_arr = json_decode($result,true); 23$token = $json_arr["token"]; 24 25//ここまで(トークンの取得)まではできていることを確認済み 26 27 28//APIキー及び取得したトークンを用い、画像をAPIに送信 29 30$file_name = './image.jpg'; 31$data = base64_encode(file_get_contents($file_name)); 32$data = array( 33 'image' => $data 34); 35 36$post = json_encode($data); 37 38 39 40$ch = curl_init(); 41 42curl_setopt($ch, CURLOPT_URL, 'https://エンドポイント/classify'); 43curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 44curl_setopt($ch, CURLOPT_POST, 1); 45curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 46 47$headers = array(); 48$headers[] = 'Content-Type:application/json'; 49$headers[] = 'X-Api-Key:APIキー'; 50$headers[] = 'Authorization:'. $token; 51curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 52 53$result = curl_exec($ch); 54if (curl_errno($ch)) { 55 echo 'Error:' . curl_error($ch); 56} 57curl_close($ch); 58 59 60$json_arr = json_decode($result,true); 61 62if ($json_arr === NULL) { 63 echo "データがありません"; 64 return; 65}else{ 66 67echo $result; 68 69} 70 71
試したこと
・ローカル環境ではShift-Jisだったので、Utf-8に返還した。
・パーミッションをサーバー指定に変更した。
・海外アタックガードなどすべて無効にした。
補足情報
利用したいAPIはAWS上にあります。
ネットを参照しながらコピペで作成しかできない初心者です。
お手数をかけますがよろしくお願いいたします。
あなたの回答
tips
プレビュー