php - laravel utilise la requête curl, la valeur de retour est considérée comme une requête et une erreur se produit
过去多啦不再A梦
过去多啦不再A梦 2017-06-05 11:08:44
0
1
1080

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梦

répondre à tous(1)
过去多啦不再A梦

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

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal