2012-04-14 12 views
0

Dies ist ein Beispiel:Holen Sie sich die neue URL nach Beitrag von CURL

Der Ursprung URL ist http://www.vietbando.com/maps/#t=1&sk=258+lý+Thường+Kiệt

Wenn ich das Formular gebucht wird.

Es neue URL ändern wie diese

http://www.vietbando.com/maps/#t=1&sk=258+lý+Thường+Kiệt&l=4&kv=15.0132985,106.744091 

Wie wird die neue URL zu bekommen?

+1

Wo ist Ihre Locke code ?? – Baba

Antwort

1

Wenn Sie sich auf eine Weiterleitung beziehen, sollte sich die neue URL immer in der Antwort in der Kopfzeile Location befinden.

Um die Header in Ihre Curl-Anfrage aufzunehmen, setzen Sie die Option CURLOPT_HEADER über curl_set_opt.

Wenn Sie mehr daran interessiert sind, nur zur nächsten URL zu navigieren/sie zu holen, anstatt die tatsächliche URL zu erfassen, können Sie einfach die FOLLOW_REDIRECTS Einstellung verwenden.

Schließlich, wenn Sie irgendeine Art von HTTP-Arbeit über ein paar Anrufe hinaus tun, würde ich sehr empfehlen, eine HTTP-Bibliothek zu verwenden (weil PHP cURL Folter ist). Siehe Guzzle, Httpful oder Requests.

+0

Ich habe versucht CURLOPT_HEADER und FOLLOW_REDIRECTS, aber es funktioniert nicht. Können Sie versuchen, diesen Link Es wird in

1

In diesem Fall können Sie die Kopfzeile Ihrer Antwort parsen, um URL zu greifen. Sie müssen diesen Code verwenden, um dies zu tun:

$ch_url = curl_init(); 
curl_setopt($ch_url, CURLOPT_URL, 'http://www.example.com/)'; //your first url 
curl_setopt($ch_url, CURLOPT_USERAGENT, 'AppleWebKit/530.5 (KHTML, like Gecko) Chrome/2.0.172.39 Safari/530.5'); 
curl_setopt($ch_url, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch_url, CURLOPT_HEADER, 1); 
curl_setopt($ch_url, CURLOPT_NOBODY, 1); //we don't need to recieve the body of response 
$headers = curl_exec($ch_url); 
curl_close ($ch_url); 

$pattern = '`.*?((http)://[\w#$&+,\/:;[email protected]]+)[^\w#$&+,\/:;[email protected]]*?`i'; //this regexp finds your url 
if (preg_match_all($pattern,$headers,$matches)) 
    $url = $matches[1][0]; //your second url 
+0

Ich verstehe das nicht gut. Das ist Code, den ich mache, aber ich tue es, aber es gibt keine neue URL zurück $ ch_url = curl_init(); curl_setopt ($ ch_url, CURLOPT_URL, 'http://www.vietbando.com/maps/#t=1&sk=258+lý+Thường+Kiệt'); // Ihre erste URL curl_setopt ($ ch_url, CURLOPT_USERAGENT, 'AppleWebKit/530.5 (KHTML, wie Gecko) Chrome/2.0.172.39 Safari/530.5'); curl_setopt ($ ch_url, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ ch_url, CURLOPT_HEADER, 1); curl_setopt ($ ch_url, CURLOPT_NOBODY, 1); // Wir müssen den Antwortkörper nicht erhalten $ headers = curl_exec ($ ch_url); curl_close ($ ch_url); –

+0

$ pattern = ''. *? ((Http): // [\ w # $ &+,\/:; =? @ .-] +) [^ \ w # $ &+,\/:; =? @ .-] *?' I'; // dieser regexp findet Ihre URL if (preg_match_all ($ pattern, $ headers, $ stimmt überein)) { $ url = $ entspricht [1] [0]; // Ihre zweite URL echo $ url; } –

+0

Also, dieser Code funktioniert, wenn Sie eine Anfrage über cURL auf die eine Seite machen und es Sie zu einem anderen umleiten (302 oder 301 Redirect). Ihr Link (http://www.vietbando.com/maps/#t=1&sk=258+lý+Thường+Kiệt) leitet nicht auf eine Seite um. Deshalb können Sie den neuen Link nicht erhalten, er existiert einfach nicht. Bitte erläutern Sie deutlicher, wie der zweite Link angezeigt wird. Ich verstehe das nicht: "Wenn ich das Formular gepostet habe." – kpotehin

Verwandte Themen