it-swarm.com.de

Senden Sie eine Ajax-Anfrage über CURL

Eine API-Anfrage muss gesendet werden. Aus irgendeinem Grund blockiert der Server die CURL-Anforderung, genehmigt jedoch eine XHR-Ajax-Anforderung. Ich könnte eine Ajax-Anfrage senden, aber ein anderes Problem entsteht - Gemischter Inhalt Meine Website wird über HTTPS bereitgestellt, aber die Anfrage, die gesendet werden muss, ist über HTTP, sodass ich Ajax nicht verwenden kann.

Ich suche nach einer Möglichkeit, eine Ajax-Anforderung über CURL zu simulieren, den Server auf irgendeine Weise zu täuschen, um zu glauben, dass die CURL-Anforderung tatsächlich eine Ajax-Anforderung ist.

Hier ist was ich versucht habe.

Dies ist meine CURL-Anfrage.

$ch = curl_init();
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64)');
    curl_setopt($ch, CURLOPT_REFERER, 'server's url');
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept:application/json, text/javascript, */*; q=0.01',
    'Accept-Encoding:gzip, deflate',
    'Accept-Language:en-US,en;q=0.9',
    'Connection:keep-alive',
    'Content-Type: application/json; charset=utf-8',
    'X-Requested-With: XMLHttpRequest',
    '__RequestVerificationToken: $token'
    ));
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_COOKIEJAR, base_path().'/cookies.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, base_path().'/cookies.txt');
    $buffer = curl_exec($ch);
    if(curl_error($ch))
    {
    $buffer =   curl_error($ch);
    }
    curl_close($ch);

return $ buffer; Diese Curl-Anfrage wird blockiert

Diese Ajax-Anfrage wird jedoch durch meinen localhost geleitet, aber da meine Live-Website HTTPS verwendet, kann ich sie nicht wirklich verwenden.

 $.ajax({
      type: "get",
      xhrFields: { withCredentials:true },
      url: http://apiendpoint.com,
      success: function(data)
      {
       // console.log(data);
      }
})
13
Dhiraj

in Chrome können Sie einen funktionierenden Curl-Ausdruck aus der Symbolleiste des Entwicklers kopieren. Versuchen Sie es mit dem von cli. Wenn dies funktioniert, können Sie herausfinden, welche Teile benötigt werden und welche nicht. Dann können Sie es zu PHP transkribieren.

 developer toolbar -> network -> select a file -> right click - copy -> copy as curl

Wenn Sie Zweifel haben, ob das gleiche von php als von curl geschieht, versuchen Sie es einfach mit requestbin .

5
lintabá

Ich denke, es ist möglich, dass der Header für das Token möglicherweise nicht das ist, was Sie denken, da $ a == 1, '$ a' in $ a konvertiert, aber "$ a" in "1" konvertiert wird Anführungszeichen).

versuchen Sie in Ihrem Beispiel zu ersetzen:

'__RequestVerificationToken: $token'

mit:

"__RequestVerificationToken: $token"

und lassen Sie uns wissen, ob das Problem dadurch gelöst wird.

Erwägen Sie die Verwendung von Durchgang ("curl-Befehl hier ..."); mit dem Vorschlag von lintabá

0
Felipe Valdes