CURL

2012-04-14 11 views
0

によってポスト後に新しいURLを取得する。これは一例です:CURL

原点URL Iフォームが掲載されている場合http://www.vietbando.com/maps/#t=1&sk=258+lý+Thường+Kiệt

です。

それはどのように新しいURLを取得するには、この

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

のように新しいURLに変更できますか?

+1

あなたのカールコードはどこですか? – Baba

答えて

1

リダイレクトを参照している場合、新しいURLは常に応答のLocationヘッダーにある必要があります。

あなたのカールリクエストに含まれるヘッダーを取得するには、CURLOPT_HEADERオプションをcurl_set_optで設定します。

実際のURLを取得するのではなく、次のURLに移動/取得することにもっと興味がある場合は、FOLLOW_REDIRECTSの設定を使用してください。

最後に、いくつかの呼び出しを超えて何らかのHTTP作業を行っている場合は、HTTPライブラリを使用することを強くお勧めします(PHP cURLは苦痛であるため)。 Guzzle,HttpfulまたはRequestsを参照してください。

+0

私はCURLOPT_HEADERとFOLLOW_REDIRECTSを試しましたが、うまく動作しません。 このリンクを試すことができます

1

この場合、あなたの応答のヘッダを取得してURLを取得することができます。 このコードを使用してこれを行う必要があります:

$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

私はよく分かりません。これは私が行うコードですが、私はそうしますが、新しいURLを返しません。 $ ch_url = curl_init(); curl_setopt($ ch_url、CURLOPT_URL、 'http://www.vietbando.com/maps/#t=1&sk=258+l++Thường+Kiệt'); //あなたの最初のURL curl_setopt($ ch_url、CURLOPT_USERAGENT、 'AppleWebKit/530.5(GeckoのようなKHTML)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); //応答の本体を受け取る必要はありません $ headers = curl_exec($ ch_url); curl_close($ ch_url); –

+0

$ pattern = ''。*?((http):// [\ w#$ &+,\/:; =?@ .-] +)[^ \ w#$ &+,\/:; =?@ .-] *?' i'; //この正規表現があなたのURLを見つけた場合 (preg_match_all($ pattern、$ headers、$ matches)){ $ url = $ matches [1] [0]; //あなたの2番目のURL echo $ url; } –

+0

このコードは、cURLを介して1ページにリクエストし、別のページにリダイレクトする場合に機能します(302または301リダイレクト)。あなたのリンク(http://www.vietbando.com/maps/#t=1&sk=258+lý+Thường+Kiệt)はどのページにもリダイレクトされません。だからこそあなたは新しいリンクを手に入れることができません。ただ存在しないだけです。 2番目のリンクがどのように表示されるかをより明確に説明してください。私はこれを理解していない: 'フォームが投稿されたとき。' – kpotehin