需求背景:
项目需要对其他平台进行一次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库