suchen

Heim  >  Fragen und Antworten  >  Hauptteil

php - Laravel verwendet eine Curl-Anfrage, der Rückgabewert wird als Anfrage betrachtet und es tritt ein Fehler auf

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

Und der Pfad, den ich ausgedruckt habe, ist:

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!

过去多啦不再A梦过去多啦不再A梦2729 Tage vor1071

Antworte allen(1)Ich werde antworten

  • 过去多啦不再A梦

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

    没理解你的问题,不过发起http请求,不推荐直接curl操作,可以试试laravel推荐的zttp库

    Antwort
    0
  • StornierenAntwort