是否有一个用PHP编写的真正的代理,或者要实现一个代理,我该怎么做?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了是否有一个用PHP编写的真正的代理,或者要实现一个代理,我该怎么做?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4709字,纯文字阅读大概需要7分钟。
内容图文
![是否有一个用PHP编写的真正的代理,或者要实现一个代理,我该怎么做?](/upload/InfoBanner/zyjiaocheng/657/9d12438db81b438796734b24069f37ec.jpg)
我一直在网上寻找PHP代理脚本,但找不到.我一直发现的脚本是下载页面并编辑HTML中的src和href属性的脚本,并且要求我浏览到安装了它们的任何网站.我不需要这个,我需要一个真正的代理来监听端口,我可以将其设置为将浏览器的所有请求路由到该端口.
我想要做的是:
>运行一个PHP脚本,该脚本将侦听我自己计算机的某些端口
>配置我的Web浏览器以使用localhost:port作为代理
>让PHP脚本将页面投放到我的浏览器
如果请求的页面使用XMLHttpRequest来获取内容,我发现所有用PHP编写的所谓的代理脚本都将惨败,因为它们根本看不到该请求.除了注入一些真正的代理不需要的巧妙JavaScript之外,没有任何链接重写方法可以解决问题.
最后,我想要的是可以访问我的浏览器和某个远程服务器之间来回的请求和响应.我希望能够使用浏览器对JavaScript,Cookie,Flash等的支持.基本上,我希望对所有通信具有编程访问权限,以便可以使用PHP进行分析或操纵.
所以,问题是
>是否由于搜索结果中的所有杂物而错过了用PHP实现的真正代理?
>如果PHP中没有真正的代理,我想尝试制作一个.在线上有资源可以帮助我了解我应该怎么做吗? (请注意,IRTM虔诚:更多地寻找基本代理的警告和体系结构)
链接表示赞赏.我知道那里有几种MITM代理,但我想用PHP代理.
我不知道也许我可以用PHP’s built-in webserver做些什么,但我也会对此感到困惑.
更新
我已经为内置Web服务器的PHP提供了一个路由器脚本,该脚本开始发挥作用.我可以启动网络服务器,并告诉我的网络浏览器将其用作代理.我制作的路由器脚本区分了本地资源和外部资源,并提供了一种处理任何一种情况的简便方法.我唯一的问题是https.服务器报告无效请求(格式错误的HTTP请求).我认为这意味着仅使用脚本和设置,该服务器根本不会执行https.我不知道.也许我可以使用Apache做到这一点,但是透明地代理https听起来很难,尤其是当我想在数据到达浏览器之前对其进行更改时.
AtropaToolbox / php_router / router.php
指向我的内置于Web服务器中的PHP的路由器脚本,从其他文件中提取实际的类.
<?php
require_once('AtropaToolbox/php_proxy/proxy.php');
$proxy = new atropa_proxy();
if($proxy->process_request() === false) {
return false;
}
?>
AtropaToolbox / php_proxy / proxy.php
扩展atropa_mod_proxy以重新定义处理程序.
<?php
require_once('AtropaToolbox/php_proxy/mod_proxy.php');
class atropa_proxy extends atropa_mod_proxy
{
protected function local_resource_handler() {
return false;
}
protected function external_resource_handler() {
$ext = $this->get_page();
//echo '<pre>' . print_r($ext, true) . '</pre>';
//$ext['page'] = preg_replace('/<a /', '<p ', $ext['page']);
$this->show_page($ext);
}
}
?>
AtropaToolbox / php_proxy / mod_proxy.php
通用路由器脚本
<?php
/**
* Rev. 1 Atropa mod_proxy for php built in webserver
*/
class atropa_mod_proxy
{
protected function is_external_resource() {
$host = parse_url($_SERVER['REQUEST_URI'], PHP_URL_HOST);
if(isset($host) && $host !== $_SERVER['SERVER_NAME']) {
return true;
} else {
return false;
}
}
protected function local_resource_handler() {
return false;
}
protected function external_resource_handler() {
$ext = $this->get_page();
$this->show_page($ext);
}
public function process_request() {
if($this->is_external_resource()) {
return $this->external_resource_handler();
} else {
return $this->local_resource_handler();
}
}
public function get_request_headers() {
$arr = array();
foreach($_SERVER as $svar => $sval) {
if(substr($svar, 0, 4) === 'HTTP') {
$svar = substr($svar, 5);
$svar = preg_replace('/_/', ' ', $svar);
$svar = ucwords(strtolower($svar));
$svar = preg_replace('/ /', '-', $svar);
$arr[$svar] = $sval;
}
}
return $arr;
}
public function pack_request_headers($headers_array) {
$packed = '';
foreach($headers_array as $header_name => $header_value) {
$packed .= $header_name . ': ' . $header_value . "\r\n";
}
return $packed;
}
public function echo_response_headers($http_response_header_array) {
foreach($http_response_header_array as $val) {
if(strpos(strtolower($val), 'connection') !== 0) {
header($val);
}
}
}
protected function get_page() {
$request_headers = $this->get_request_headers();
$request_headers = $this->pack_request_headers($request_headers);
$method = $_SERVER["REQUEST_METHOD"];
$scheme = parse_url($_SERVER['REQUEST_URI'], PHP_URL_SCHEME);
$opts = array(
$scheme => array(
'method' => $method,
'header' => $request_headers
)
);
if(count($_POST) > 0) {
$content = http_build_query($_POST);
$opts[$scheme]['content'] = $content;
}
$context = stream_context_create($opts);
$ext = array();
$ext['page'] = file_get_contents($_SERVER['REQUEST_URI'], false, $context);
$ext['http_response_header'] = $http_response_header;
return $ext;
}
protected function show_page($ext) {
header_remove();
$this->echo_response_headers($ext['http_response_header']);
echo $ext['page'];
}
}
?>
解决方法:
请继续阅读Socket Programming with PHP和An Introduction to Sockets in PHP.您将运行PHP Daemon,使PHP侦听端口并处理所有请求.
为此,您可能需要查看http://sourceforge.net/projects/poxy/,以便在那里建立PHP守护程序.您还必须学习代理与客户的沟通方式. Poxy是一个基于Web的应用程序,您输入一个URL并为您加载它.它不允许您监听端口,并且它不是php守护程序,因此您将不得不为PHP守护程序代理做很多编码.
内容总结
以上是互联网集市为您收集整理的是否有一个用PHP编写的真正的代理,或者要实现一个代理,我该怎么做?全部内容,希望文章能够帮你解决是否有一个用PHP编写的真正的代理,或者要实现一个代理,我该怎么做?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。