0

うまくいけば、私はこれを見落としているだけです。

PHP を使用してリダイレクト リンクの宛先 URL を取得しようとしています。アフィリエイト/クロークされたリンクのサイト URL を取得するためです。

最良の例: http://tinyurl.com/2txは google.com に移動します

注: これは一例です。リンクは動的に作成されます。

今、私はURLを渡します

www.mysite.com/redirect.php?link=http://tinyurl.com/2tx

サイトのコードは次のとおりです - 注: URL にはアンパサンドが含まれているため、GET 経由でこのルートに移動する必要がありました。

<?php
    $name = http_build_query($_GET);
    // which you would then may want to strip away the first 'name='
    $name = substr($name, strlen('name='));
    //change link to a nice URL
    $url = rawurldecode($name);
?>

URL を取得する簡単なスクリプトがありますが、URL を処理して宛先 URL を取得するにはどうすればよいですか?

あまり混乱しないことを願っています。

乾杯、 ロブ

4

4 に答える 4

4

次回はコードの一部を投稿する必要があります。これを行うために使用cURLしていると思います。それはかなり簡単です:

//sanitize
$ch = curl_init($_GET['link']);

//follow redirects
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

curl_exec($ch);

$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

EDIT:Dagonによると、「URLは知っているがそこには行かない」だけです。URL を知る必要があるだけで、そのコンテンツを取得する必要がない場合は、この設定を使用する方が効率的です。

curl_setopt($ch, CURLOPT_NOBODY, true);
于 2012-12-04T22:02:20.380 に答える
0

これは、エンコードの問題である可能性があります。URL のパラメーターはエンコードされていないため、$_GET を使用して取得しようとすると破損している可能性があります。

次の URL を使用します。

www.mysite.com/redirect.php?link=http%3A%2F%2Ftinyurl.com%2F2tx

関数を使用して、PHP で URL 変数をエンコードできますurlencode()。あなたが望む(私が思うに)変数は、次のようにアクセスできるようになりました:

echo $_GET['link'];  // http://tinyurl.com/2tx
于 2012-12-04T22:36:24.907 に答える
0

これが私がそれを行う方法です(コメントを読んでください):

<?php

// Connect to the page:
$ch = curl_init("http://tinyurl.com/2tx");

// Don't get the body (remove if you want the body):
curl_setopt($ch, CURLOPT_NOBODY, true);

// Follow the page redirects:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

// Retun the data as a string (Remove to echo to the page):
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// Execute:
curl_exec($ch);

// Get data:
print_r($data = curl_getinfo($ch));

// Get just the url:
echo $data["url"];
于 2012-12-04T22:43:01.197 に答える
0

持っている URL に HTTP HEAD リクエストを送信します。宛先 URL を含む HTTP 301 または 302 応答が返されます。

例:ここにURLを入力して、HTTP ヘッド リクエストを作成したときに返されるレスポンスを確認します。

于 2012-12-04T22:02:47.790 に答える