所以在问到问题后,人们不明白我在问什么......
<?php
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, 'http://www.mybroadband.co.za/news/');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$curl_response = curl_exec($ch);
curl_close($ch);
//Echo page back
echo $curl_response;
?>
请运行该脚本。在你的地址栏中你会看到.. wwww.localhost / thisscriptname.php 现在点击一个链接。看看你的地址栏。它重定向到www.mybroadbank.co.za/xyz
我不希望它重定向到那里。我希望它通过curl获取链接内容并在www.localhost / thisscriptnameoranyname.php上显示
请帮忙。 感谢
答案 0 :(得分:1)
这是因为cURL Response带来了该URL的所有html代码并应用到您当前的页面中。因此,返回到您网页的所有链接都会链接到目标网址(http://www.mybroadband.co.za/)。这会在响应中产生类似的结果:
<a href="http://www.mybroadband.co.za/xyz">XYZ</a>
<a href="http://www.mybroadband.co.za/abc">ABC</a>
因此,当您点击这些链接时,它会引导您转到http://www.mybroadband.co.za/something
。您需要的是不要重定向到这些页面,而是在本地主页中显示内容?假设我是对的。
因此,为了解决此问题,您需要编辑cURL响应,其中转换上面的HTML锚标记(链接)到:
<a onClick="getPage('http://www.mybroadband.co.za/xyz')">XYZ</a>
<a onClick="getPage('http://www.mybroadband.co.za/abc')">ABC</a>
然后只需在Javascript中编写一个getPage($link)
函数,使用AJAX从$ link请求页面并返回,就像你所做的一样。
答案 1 :(得分:0)
解释发生了什么:
它完全符合你的要求。 但是浏览器会解释HTML,因此您可以看到该页面。如果您想查看实际的HTML代码,请使用echo htmlspecialchars($curl_response);
。将其放在文本区域可能无法产生正确的结果。
如果您想要替换HTML代码中的所有链接以使其保留在您的页面上,那么这是一个完全不同的球赛。您将需要解析HTML代码并使用preg_replace和str_replace等替换它们。
答案 2 :(得分:0)
从检索到的文本的标题中删除<base>
标记。这导致所有链接都基于原始网站,而不是您的代理版本:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<base href="http://mybroadband.co.za/news/" />
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--- remove this line
但是,如果您只是盲目地浏览文本而没有做任何事情,那么您应该将其放入iframe并将带宽保存在服务器上。