Anforderungshintergrund:
Das Projekt muss eine Curl-Anfrage an andere Plattformen senden, und die anderen Plattformen senden Bestätigungscodes an die Benutzer und senden mir eine erfolgreiche Quittung.
Lokales Debuggen ist kein Problem , aber auf dem Server werden die $data-Daten in der Curl-Empfangsbestätigung, also $data = curl_exec($curl);, als Anforderung betrachtet, und das Token von $data muss überprüft und verteilt werden finden Sie in der Routing-Datei...
Meine Ideen zur Fehlerbehebung:
Ich habe zuerst diesen Satz var_dump(Request::path()) zur Handle-Methode von
./vendorlaravelframeworksrcIlluminateFoundationHttpMiddlewareVerifyCsrfToken.php
hinzugefügt:
öffentliches Funktionshandle($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;
Der ausgedruckte Pfad ist die URL zum Senden der Curl-Anfrage, und dann gibt es noch die Plattform-URL, auf der ich die Curl-Kommunikation durchführen möchte, was zu dem Grund führt, warum ich später csrf_token-Fehler und Pfadfehler gemeldet habe.
Die Controller-Methode zum Senden Curl-Anfragen sind:
/*
* 发送验证码请求
*/
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"
Die erste Zeichenfolge ist der Methodenpfad, den ich zum Senden von Curl verwendet habe, und die zweite Zeichenfolge ist die URL zum Senden der Quittung
Ich finde es sehr seltsam, dass die Rückgabe von Curl nicht als Bitte betrachtet werden sollte!
没理解你的问题,不过发起http请求,不推荐直接curl操作,可以试试laravel推荐的zttp库