首頁  >  問答  >  主體

php - laravel 使用curl請求,返回值被認為是一次請求而出錯

需求背景:
專案需要對其他平台進行一次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的返回當做是一次請求的啊!請問大家為什麼會這樣?謝謝!

过去多啦不再A梦过去多啦不再A梦2667 天前1006

全部回覆(1)我來回復

  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-05 11:10:44

    沒理解你的問題,不過發起http請求,不建議直接curl操作,可以試試laravel推薦的zttp庫

    回覆
    0
  • 取消回覆