gpt4 book ai didi

php - 是否有一个用 PHP 编写的真正的代理,或者我需要做什么才能实现一个代理?

转载 作者:搜寻专家 更新时间:2023-10-31 20:46:35 24 4
gpt4 key购买 nike

我一直在网上四处寻找 PHP 代理脚本,但找不到。我一直在寻找的是下载页面和编辑 HTML 中的 srchref 属性的脚本,并且要求我浏览到安装它们的任何网站。我不需要这个,我需要一个真正的代理监听一个端口,我可以将我的浏览器设置为将所有请求路由到该端口。

我想做的是:

  1. 运行一个 PHP 脚本来监听我自己电脑的某个端口
  2. 将我的网络浏览器配置为使用 localhost:port 作为代理
  3. 让 PHP 脚本将页面提供给我的浏览器

如果请求的页面使用 XMLHttpRequest 获取内容,我发现所有所谓的用 PHP 编写的代理脚本都会失败,因为它们根本看不到该请求。如果不注入(inject)一些真正代理不需要的巧妙 JavaScript,再多的链接重写也无法解决问题。

我最终想要的是访问在我的浏览器和某个远程服务器之间来回的请求和响应。我希望能够使用我的浏览器对 JavaScript、cookie、flash 等的支持。基本上,我希望能够以编程方式访问所有通信,以便我可以使用 PHP 分析或操作它。

所以,问题是

  • 我是否因为搜索结果中的杂音而错过了用 PHP 实现的真正代理?
  • 如果 PHP 中没有真正的代理,我想尝试制作一个。是否有在线资源可以帮助我了解我应该做什么? (请注意,我虔诚地进行 RTM:寻找更多基本代理的注意事项和架构)

感谢链接。我知道那里有几个 MITM 代理,但我想要一个用 PHP 编写的。

我不知道我是否可以用 PHP's built-in webserver 做点什么但我也会搞砸的。

更新

我有一个用于 PHP 内置网络服务器的路由器脚本,它开始显示出希望。我可以启动网络服务器并告诉我的网络浏览器将其用作代理。我制作的路由器脚本区分了本地资源和外部资源,并提供了一种处理这两种情况的简单方法。我唯一的问题是 https。服务器报告 Invalid Request (Malformed HTTP Request)。我认为这意味着该服务器根本不会仅使用脚本和设置来执行 https。我不知道。也许我可以使用 Apache 来做到这一点,但透明地代理 https 听起来很难,特别是如果我想在数据到达我的浏览器之前更改数据。

AtropaToolbox/php_router/router.php我的 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 PHPAn Introduction to Sockets in PHP .您将运行 PHP Daemon让 PHP 监听端口并处理所有请求。

为此,您可能需要查看 http://sourceforge.net/projects/poxy/所以你可以在那里建立你的 PHP 守护进程。您还必须了解代理如何与客户端通信。 Poxy 是一个基于网络的应用程序,您输入一个 URL 并为您加载它。它不允许您监听端口,而且它不是 PHP 守护进程,因此您将不得不为 PHP 守护进程代理编写大量代码。

关于php - 是否有一个用 PHP 编写的真正的代理,或者我需要做什么才能实现一个代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12449569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com