請問一下,網站使用JWT會和curl做檔案上傳干擾嗎?
我只要把這行刪掉,接收端的api $_POST就收得到上傳檔案,
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Authorization: '.$bearer]);
加上去,接收端的api $_POST就收不到上傳檔案。
請問有人遇過這個問題嗎?
$response = getDepositAllData($_POST['username'],$_FILES['fileToUpload']['name'],$_FILES['fileToUpload']['type'],$_POST['session']);
$header = base64UrlEncode(['alg'=>"HS256","typ"=>"JWT"]);
$body = base64UrlEncode($response);
$signature = hash_hmac($header.'.'.$body, '2022xxxxx');
$bearer = $header . '.' .$body . '.' . $signature . PHP_EOL;
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, WEBSERVICE_URL);
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 60);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_HTTPHEADER, [
'Authorization: '.$bearer]);
curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
$data = curl_exec($curl);
if (curl_error($curl)) {
die(curl_error($curl));
}
print_r($data);
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
curl_close($curl);
認真來說,這已經不是JWT及CURL的問題了。
你要先了解你的API端。是有做了什麼事才行。
如使用了認証,可能會產生跳轉或轉發頁面後而POST參數遺失。
問題一定是在你的API端。
這邊就得要說說一下很多人常做的不好的事。
API與控制合併使用處理。
基本上並不能說不好。只是當你的控制器有做了任何跳轉頁的動作。
都容易讓API請求失敗。
當然了,因為我現在也看不到你API對應的程式為何。我只能幫你往那邊去猜測。
實際情況也請你思考一下。不要一下子就覺得是JWT跟CURL的問題。
它們本身是沒啥問題的。大多數都是用錯的方式而發生問題的。
它們是很無辜的。