如何在PHP中代理另一个页面

时间:2011-06-21 13:04:35

标签: php proxy

我正在寻找用PHP代理页面的最快速最简单的方法。我不希望重定向用户,我只是希望我的脚本将相同的内容,响应代码和标题作为另一个远程URL返回。

3 个答案:

答案 0 :(得分:12)

echo file_get_contents('proxypage'); 那会有用吗?

修改

第一个答案有点短,我不相信它会按你的意愿处理标题。

但是你也可以这样做:

function get_proxy_site_page( $url )
{
    $options = [
        CURLOPT_RETURNTRANSFER => true,     // return web page
        CURLOPT_HEADER         => true,     // return headers
        CURLOPT_FOLLOWLOCATION => true,     // follow redirects
        CURLOPT_ENCODING       => "",       // handle all encodings
        CURLOPT_AUTOREFERER    => true,     // set referer on redirect
        CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
        CURLOPT_TIMEOUT        => 120,      // timeout on response
        CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
    ];

    $ch = curl_init($url);
    curl_setopt_array($ch, $options);
    $remoteSite = curl_exec($ch);
    $header = curl_getinfo($ch);
    curl_close($ch);

    $header['content'] = $remoteSite;
    return $header;
}

这将返回一个包含远程页面上大量信息的数组。 $header['content']将包含网站内容和标题,$header[header_size]将包含该标题的长度,因此您可以使用substr将其拆分。

然后只需使用echoheader来代理页面。

答案 1 :(得分:5)

您可以使用PHP cURL函数来实现此功能:

http://www.php.net/curl

// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// grab URL and pass it to the browser
$urlContent = curl_exec($ch);

从这一点开始,您将使用http://www.php.net/curl-getinfo获取响应标头信息。 (您可以抓取几个值,所有值都在文档中列出)。

// Check if any error occured
if(!curl_errno($ch))
{
    $info = curl_getinfo($ch);
    header('Content-Type: '.$info['content_type']);
    echo $urlContent;
}

确保关闭cURL手柄。

// close cURL resource, and free up system resources
curl_close($ch);

答案 2 :(得分:0)

您可以使用curl获取下一页的html,然后回显响应。