Contexte requis :
Le projet doit faire une demande curl à d'autres plateformes. J'envoie mon numéro de téléphone portable, et les autres plateformes envoient des codes de vérification aux utilisateurs et m'envoient un reçu réussi.
Le débogage local ne pose aucun problème. , mais sur le serveur, les données $data dans le reçu curl, c'est-à-dire $data = curl_exec($curl);, sont considérées comme une requête, et le jeton de ces $data doit être vérifié, et sa distribution doit être trouvé dans le fichier de routage. Règles...
Mes idées de dépannage :
J'ai d'abord ajouté cette phrase var_dump(Request::path()) à la méthode handle de
./vendorlaravelframeworksrcIlluminateFoundationHttpMiddlewareVerifyCsrfToken.php
:
handle de fonction publique ($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;
Le chemin imprimé est l'URL qui envoie la requête curl, puis il y a l'URL de la plate-forme que je souhaite utiliser pour la communication curl, ce qui conduit à la raison pour laquelle j'ai signalé les erreurs csrf_token et les erreurs de chemin plus tard
La méthode du contrôleur I. utiliser pour envoyer des requêtes curl est :
/*
* 发送验证码请求
*/
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"
La première chaîne est le chemin de la méthode que j'ai utilisé pour envoyer curl, et la dernière est l'URL pour envoyer le reçu
.Je pense que c'est très étrange. Le retour du curl ne doit pas être considéré comme une demande ! Puis-je demander pourquoi cela se produit ? Merci !
Je ne comprends pas votre question, mais pour lancer une requête http, l'opération curl directe n'est pas recommandée. Vous pouvez essayer la bibliothèque zttp recommandée par laravel
.