phpproxy(phpproxy21)

http://www.itjxue.com  2023-02-12 11:16  来源:未知  点击次数: 

PHP实现代理IP

PHP程序在服务器上运行,不在浏览者的机器上运行,只是把运行生成的HTML结果发送给浏览者的浏览器程序,不可能修改浏览者的代理设置。

PHP可以修改服务器机器的代理设置,方法是修改注册表。

proxy.php什么意思

PHP 代理脚本 php-proxy

php-proxy 是基于 PHP,Symfony 和 cURL 的代理脚本,这个库借鉴了 Glype,Jenssegers proxy 和 Guzzle 的经验。

示例

require('vendor/autoload.php');

use Proxy\Http\Request;

use Proxy\Proxy;

$request = Request::createFromGlobals();

$proxy = new Proxy();

$proxy-getEventDispatcher()-addListener('request.before_send', function($event){$event['request']-headers-set('X-Forwarded-For', 'php-proxy');});

$proxy-getEventDispatcher()-addListener('request.sent', function($event){if($event['response']-getStatusCode() != 200){die("Bad status code!");

}

});

$proxy-getEventDispatcher()-addListener('request.complete', function($event){$content = $event['response']-getContent();$content .= '!-- via php-proxy --';

$event['response']-setContent($content);});

$response = $proxy-forward($request, "");// send the response back to the client

$response-send();

Athlon1600 / php-proxy

Watch17 Star73 Fork36

A web proxy script written in PHP and built as an alternative to Glype. — More...

Issues

#25 Install in Laravel 5.2 encountered a bug by cynhard 2016-11-28#38 transfer-encoding: chunked misleads browser by h2g-internetagentur 2016-11-14#37 Better content-type check by JClerc 2016-11-08#19 Gmail cookies problem by AoiRei 2016-10-24#40 Google Drive Dropbox

怎么样用php语言实现通过proxy代理服务器访问网站呢??

function curl_string ($url,$timeout = 3,$proxy=1){

$ua = array('Mozilla','Opera','Microsoft Internet Explorer','ia_archiver');

$op = array('Windows','Windows XP','Linux','Windows NT','Windows 2000','OSX');

$agent = $ua[rand(0,3)].'/'.rand(1,8).'.'.rand(0,9).' ('.$op[rand(0,5)].' '.rand(1,7).'.'.rand(0,9).'; en-US;)';

Tor 地址与端口

$tor = ''; //这里是你的代理服务器

连接超时设置

$timeout = 3;

$ack = curl_init();

if($proxy)

{

curl_setopt($ack, CURLOPT_PROXY, $tor);

}

curl_setopt($ack, CURLOPT_URL, $url);

curl_setopt($ack, CURLOPT_HEADER, 0);

curl_setopt($ack, CURLOPT_USERAGENT, $agent);

curl_setopt($ack, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ack, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($ack, CURLOPT_TIMEOUT, $timeout);

$result = curl_exec($ack);

curl_close($ack);

return $result;

}

消息服务器websocket高并发分布式swoole 架构思路

消息服务器使用socket,为避免服务器过载,单台只允许500个socket连接,当一台不够的时候,扩充消息服务器是必然,问题来了,如何让链接在不同消息服务器上的用户可以实现消息发送呢?

要实现消息互通就必须要让这些消息服务器本身能互通,想了两个方式,一种是消息服务器之间交叉链接,另一种是增加一个特殊的消息服务器,这个消息服务器不对外开放,只负责消息转发和推送。

下列测试不考虑防火墙等。仅测试可行性和效率。

消息服务器

转发服务器

公共缓存

软件环境

client1 可向 client2 或者其他 client 发送消息,并接收其他 client 发送的消息.

Redis 中保存 client 连接的信息,给每个用户分配唯一的 key ,包括链接的哪台服务器,转发服务器定时检测消息服务器,如消息服务器挂掉,由转发服务器清理掉Redis已经挂掉的所有链接。

1. Client1 给 Client2 发送一条消息

2. Socket1 接收到消息,根据 key从Redis 取出 Client2 的连接信息,连接在本机,直接推送给 Client2 ,流程结束。

3.如果连接不在本机,把消息推送到转发服务器,由转发服务器把该消息推送给连接所在消息服务器,消息服务器接收消息,推送给 Client2 。

服务器上创建一个server.php,内容如下:

上只需把ip变更一下即可。192.168.0.201变更为192.168.0.202.

在转发服务器上建立脚本proxy.php,内容如下:

注意开启顺序

1.开启转发服务器php proxy.php

2.分别开启socket服务器php server.php

可以在转发服务器上看到两个消息服务器已经连接

3.开始测试,分别打开两个telnet,连接两个消息服务器,发送消息测试:

登陆

基于强大的 swoole 扩展,让php高效的实现这些成为可能,目前消息服务器到转发服务器是长连接,转发服务器到消息服务器是短连接,存在性能瓶颈,也浪费了连接资源。下一步改造成长连接,消息服务器的client使用异步。

(责任编辑:IT教学网)

更多

推荐MYSQL文章