jQuery+javascript +php构建网页代理网站

初看会觉得很疯狂,但是这的确能很简单的实现,只是里面的原理比较费脑子,尤其是解决如何在一个已经代理中的网页中点击其中链接使其仍然被网站代理而不会出现跳转以及错误(绝对链接和相对链接导致的错误)是非常棘手的。

首先我们知道一些网站比如facebook youtube twitter 在国内是被封锁的,那如何不通过VPN访问呢?只有一个办法,网页代理。网页代理原理是由放在外国的服务器替你抓取那些你想访问的网站然后显示出来,这样你就间接地访问了那些网站。
  我现在把这个业务逻辑由浅往深讲。
  首先我们先弄明白如何抓取一个网页。
PHP代码如下:

[php]
<?
// 初始化一个 cURL 对象
$curl = curl_init();

// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, $url);

// 设置header
//curl_setopt($curl, CURLOPT_HEADER, 1);

// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

// 运行cURL,请求网页
$data = curl_exec($curl);

// 关闭URL请求
curl_close($curl);

// 显示获得的数据

var_dump($data);}
[/php]
那好,我们把这段程序运行在国外服务器上,然后把$url 改成你想访问的网站,那么你就可以看到被封锁的网站了。

可是,有没有发现每次访问其它网页你都要更改$url参数很麻烦,那我们不修改源代码,设置一个表单提交你要访问的网址,如果没有输入或者输入错误直接转到一个特定的网址,这里我们设置为百度。这样就稍微好一点,现在放上新的代码
[php]
<?php
if((isset($_GET[‘url’]))&&($_GET[‘url’]!=”")){
$url=$_GET[‘url’];}
else {
$url=”http://www.baidu.com”;
?>
<form method=”GET” action=”index.php” >
<input type=”text” name=”url”/>
<input type=”submit” value=”转到”>
</form>
<?
}
// 初始化一个 cURL 对象
$curl = curl_init();

// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, $url);

// 设置header
//curl_setopt($curl, CURLOPT_HEADER, 1);

// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

// 运行cURL,请求网页
$data = curl_exec($curl);

// 关闭URL请求
curl_close($curl);

// 显示获得的数据
var_dump($data);
[/php]
但是,这样修改也是极其麻烦,带来很不好的用户体验,我们希望能以一种无阻隔和不用代理一样的一种方式来上网,于是我们便开始修改目前所代理的网页,使其所有链接均呈现以下一种状态:
1.所有的链接均为http://localhost/index.php?url=XX(localhost 为服务器网址 XXX 为网页上原本的地址)
这一点很好办,用jquery.each()循环放上代码
[html]
$(document).ready(function(){
$(‘a’).each(function(index)
{
var href=”http://localhost/?url=http://”+$(this).attr(“href”);

})
$(this).attr(“href”,href); })
[/html]

Leave a Reply

Time limit is exhausted. Please reload CAPTCHA.

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据