2016-10-20 3 views
1

ich bin ziemlich neu in PHP. Aktuell habe ich ein Problem mit php curl post und redirection. Ich hatte viel Code geschrieben, um eine domänenübergreifende API zu verbinden. In dieser API wird die Antwort meine Seite auf eine andere Seite umleiten.PHP CURL Redirect

also, jetzt, was ich gegenüberstelle, war, dass ich der API Antwort auch nicht folgen kann. Es bedeutet in meinem PHP-Skripte, meine Curl hatte die Umleitung Seite Web-Content erhalten, aber meine Seite noch übrig.

Darf ich wissen, ist PHP Curl folgen der API-Umleitung?

Kann jemand dieses Problem lösen?

Unten wird mein Code sein.

$url = "http://www.google.com.my"; //example this is an API 
$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt ($ch, CURLOPT_REFERER, $url); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, $data_string); 
curl_setopt ($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Content-Length: ' . strlen($data_string))); 

$result = curl_exec($ch); 
$response = curl_getinfo($ch); 
curl_close($ch); 

Im $ Ergebnis hatte ich die API-Umleitungsseite erhalten. Aber es ist nur Webinhalt.

+1

Code Geben Sie, was Sie versucht haben. – AHJeebon

+0

Was ist der Wert von $ data_string? Und [http://www.google.com.my] hat keine URL angegeben. – AHJeebon

+0

Der $ data_string wird als Parameter in json festgelegt, um die API zu verbinden. und die URL ist nur ein Beispiel für API als Beispiel. –

Antwort

2

Es gibt zwei HTTP-Anfragen hier.

  1. vom Browser an Ihre PHP
  2. Von der PHP API

Die beiden Anträge sind unabhängig. Sie haben ihre eigenen Antworten und es gibt keine Verbindung zwischen ihnen, die Sie nicht selbst erstellen.

Wenn Antwort 2 "Redirect" sagt, dann wird das nicht automatisch Antwort 1 auch sagen "Redirect".

, das zu tun:

  • Schalten CURLOPT_FOLLOWLOCATION off
  • die Location-Header aus der Antwort auf 2
  • Ausgabe eines Location-Header (mit header() Funktion) in Ihrem PHP lesen, so dass es erscheint in der Antwort auf 1

Dies setzt voraus, dass die Antwort auf Ihre Anfrage direkt im Browser angezeigt wird. Das heißt, dass Sie ein Formular im Browser oder ähnlichem eingereicht haben.

Wenn Request 1 eine Ajax-Anforderung war, würde das Weiterleiten nur dazu führen, dass die umgeleitete Seite an JavaScript übergeben wird. Es würde keine neue Seite im Browser laden.Wenn Sie möchten, JavaScript sagen, dann eine neue Seite zu laden:

  • Schalten CURLOPT_FOLLOWLOCATION off
  • Lesen Sie die Location-Header aus der Antwort auf 2
  • Setzen Sie, dass in dem Körper der Reaktion auf 1 (die Sie als JSON kodiert werden könnten)
  • diese Antwort in Ihrem JavaScript Lesen und verwenden Sie es location.href auf einen neuen Wert zu setzen
+0

, aber was ich jetzt gegenüberstellen, ist die Cross-Domain-API wird die Seite automatisch auf eine andere Seite umleiten. Wenn Sie auf dem basieren, was Sie gerade vorgestellt haben, wird header() bei access-control-allow-origin abstürzen. –

+0

@yewpan - Es gibt zwei halbe Antworten. Der zweite befasst sich mit dem JavaScript-Fall. Setzen Sie 'location.href' auf einen neuen Wert, wird kein Ursprungsfehler verursacht. – Quentin

+0

aber jedes Mal in die API geladen werden müssen einige Parameter in JSON Post. deshalb verwechsele ich –