Maison  >  Questions et réponses  >  le corps du texte

php - laravel utilise la requête curl, la valeur de retour est considérée comme une requête et une erreur se produit

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);
}

Et le chemin que j'ai imprimé est :

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 !

过去多啦不再A梦过去多啦不再A梦2716 Il y a quelques jours1050

répondre à tous(1)je répondrai

  • 过去多啦不再A梦

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

    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

    .

    répondre
    0
  • Annulerrépondre