2

リダイレクト URL を取得するために次のようなコードを書きました。このコードはローカル マシンでは正常に動作しますが、ホスティング サーバーでは、「redirect_url」はホスト サーバーの curl バージョンでサポートされていません。解決方法を教えてください。これ?つまり、どうすれば同じ目標を達成できますか (リファラーを使用して http 要求を発行し、「redirect_url」の助けを借りずにリダイレクト URL を取得します)、ありがとう!

<?php
$ch = curl_init(); 

$referer= "xxx";
$url = "xxx";

curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$result = curl_exec($ch);

$info = curl_getinfo($ch);

$redirect_url = $info['redirect_url'];

curl_close($ch);
?>
4

5 に答える 5

4

ドキュメントによると、curl_getinfoは という名前の配列キーを返しません"redirect_url"CURLINFO_EFFECTIVE_URLおそらく、または配列キーが必要です"url":

  • $redirect_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

    または

  • $redirect_url = $info["url"];

CURLINFO_EFFECTIVE_URLは最後に有効な URL であるため、リクエストがリダイレクトされた場合、最終的なURL はここになります。


また、curl にリダイレクトをたどらせたい場合はCURLOPT_FOLLOWLOCATION、リクエストを行う前に設定する必要があることに注意してください。

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
于 2013-05-30T15:43:02.263 に答える
3

私が行った解決策は、プラグインがヘッダーを返し、場所パラメーターを抽出できるようにすることです

curl_setopt($ch, CURLOPT_HEADER, 1);
$exec=curl_exec($ch);
$x=curl_error($ch);
$cuinfo = curl_getinfo($ch);

if( $cuinfo['http_code'] == 302 && ! isset($cuinfo['redirect_url']) ){

    if(stristr($exec, 'Location:')){


        preg_match( '{Location:(.*)}' , $exec, $loc_matches);
        $redirect_url = trim($loc_matches[1]);

        if(trim($redirect_url) !=  ''){
            $cuinfo['redirect_url'] = $redirect_url;
        }


    }

}
于 2015-11-21T10:39:02.633 に答える
2

PHP 5.3.7 で CURLINFO_REDIRECT_URL が導入されました。古いバージョンがないことを確認してください

于 2016-01-15T10:22:03.200 に答える
0

FOLLOWLOCATION なしで curl を使用すると、curl 情報に redirect_url 要素が含まれます。これにより、「手動」リダイレクトのタスクが簡素化されますが、curl のバージョンに依存しているようです。

別の方法は、応答ヘッダーを分析し、そこからリダイレクト URL を取得することです。これが役立ちます: http://slopjong.de/2012/03/31/curl-follow-locations-with-safe_mode-enabled-or-open_basedir-set/

于 2013-09-28T10:46:27.973 に答える
0

CURL には がなくredirect_url、代わりに が使用urlされるため、これを置き換えます。

$redirect_url = $info['redirect_url'];

これとともに:

$redirect_url = $info['url'];
于 2013-05-30T15:45:16.710 に答える