需求背景:
專案需要對其他平台進行一次curl的請求,我發送手機號過去,其他平台發送驗證碼給用戶並給我發送成功的回執.
問題:
本地調試是沒問題的,但是上到伺服器上卻發生了將curl回執,即$data = curl_exec($curl);中的$data資料當成是一次請求,並且還要驗證這個$data的token,還要在路由檔案中尋找他的分發規則...
我的排錯思路:
我首先在
./vendorlaravelframeworksrcIlluminateFoundationHttpMiddlewareVerifyCsrfToken.php
的handle方法添加了這樣一句var_dump(Request: :path()):
public function handle($request, Closure $next)
{
var_dump(Request::path());
if ($this->isReading($request) || $this->shouldPassThrough($request) || $this->tokensMatch($request)) {
return $this->addCookieToResponse($request, $next($request));
}
throw new TokenMismatchException;
}
結果印出來的路徑是發送curl請求的url,然後還有我要進行curl通信的平台url,這就導致了我之後csrf_token報錯和路徑報錯的原因.
我發送curl請求的控制器方法為:
/*
* 发送验证码请求
*/
public function ajaxRquest(Request $request) {
$input['tel_num'] = $request->input('tel');
$url = config('Api');
$url = $url['sendVerifyCode'];
if ($request->input('code_attr') == 'submitInformation') {
$input['union_event'] = 'submitInformation';
} else {
$input['union_event'] = 'queryProgress';
}
$result = $this->postCurlInfo($url, json_encode($input));
return $result;
}
public function postCurlInfo($url, $data) {
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
),
));
return curl_exec($curl);
}
而我印出來的路徑是:
string(16) "Index/ajaxRquest" string(31) "v1/serviceCenter/sendVerifyCode"
第一個string是我發送curl的方法路徑,而後面那個是發送回執的url.
我覺得很奇怪,不應該出現將curl的返回當做是一次請求的啊!請問大家為什麼會這樣?謝謝!
沒理解你的問題,不過發起http請求,不建議直接curl操作,可以試試laravel推薦的zttp庫