用php实现proxy功能的示范[已升级至v0.0.2]_PHP
Proxy
刚刚写的练手的作品。感觉还是有些实用价值的。。放出来给大家试试。功能:通过php实现代理功能
适用用户:在家下载较慢。且懒得找proxy。且有高速主机,且主机有php,且主机支持socket。
使用方法:
1。把本程序传到主机上
2。通过浏览器浏览主机上的此文件
3。在url中填入欲下载的文件地址(如果有必要,可以填入referer)
4。点击get proxy url
5。新打开的页面中的链接即为通过proxy下载的链接
注意:
1。支持多线程下载,断点续传
2。仅支持http协议
3。不支持服务器端header重定向
4。不支持http auth
5。下载较大的文件时,可以修改程序中set_time_limit的值,以减少断线的现象(默认为180,即3分钟)
PHP代码:--------------------------------------------------------------------------------
/***************************************/
/* */
/* Php Http Proxy */
/* version: 0.0.2 */
/* last modify: 2005.1.12 */
/* author: q3boy
/* */
/***************************************/
set_time_limit(180);
define('PP_ERROR_CODE',1);
define('PP_ERROR_MESSAGE',2);
define('PP_ERROR_ALL',3);
define('PP_RETURN_STRING',1);
define('PP_RETURN_ARRAY',2);
define('PP_RETURN_ALL',3);
class CPhpProxy {
var $_strUrl;
var $_arrArgv;
var $_strRef;
var $_arrUrl;
var $_resSocket;
var $_intError;
var $_strError;
var $_arrDefaultArrayUrl;
var $_arrDefaultPort;
function CPhpProxy($strUrl = null, $arrArgv = array()) {
$this->init();
is_null($strUrl)?':$this->setUrl($strUrl);
is_null($arrArgv['refer'])?':$this->setRef($arrArgv['refer']);
$this->proxy($strUrl,$arrArgv);
}
function setError($intError,$mixArgv=null) {
$this->_intError = $intError;
if($intError==1001) {
$this->_strError = "调用 $mixArgv 方法时参数传递出错, 枚举值不存在";
}elseif($intError==1) {
$this->_strError = "url 错误, url 格式不正确.\n".$mixArgvs;
}elseif($intError == 2) {
$this->_strError = "url 错误, 目前尚未支持此协议.\n".$mixArgvs;
}elseif($intError == 3) {
$this->_strError = "无法打开 ".$this->_arrUrl['host'].':'.$this->_arrUrl['port']."\n".$mixArgv[0].': '.$mixArgv[1];
}
Return false;
}
function getError($enumReturnType=PP_ERROR_CODE) {
if($enumReturnType==PP_ERROR_ALL) {
Return array(str_pad($this->_intError,5,'0',STR_PAD_LEFT),$this->_strError);
}elseif($enumReturnType==PP_ERROR_MESSAGE) {
Return $this->_strError;
}elseif($enumReturnType==PP_ERROR_CODE) {
Return $this->_intError;
}else {
Return false;
}
}
function init() {
$this->_strUrl = null;
$this->_arrArgv = array();
$this->_strRef = null;
$this->_arrUrl = array();
$this->_resSocket = null;
$this->_intError = 0;
$this->_strError = 'there is no error';
//arrurl 默认值
$this->_arrDefaultArrayUrl = array('protocol'=>'http','file'=>'index.htm');
//默认端口
$this->_arrDefaultPort =array('http'=>'80');
Return true;
}
function setUrl($strUrl) {
$strUrl = trim($strUrl);
//正则
$reg = "/^(([\w]+):\/\/)?([^:|\/|@]*:)?([^:|\/|@]*@)?([\w|\-|\.]+)(:\d+)?(\/[^\?|#]*)?(\?[^#]*)?(#.*)?$/is";
if(!preg_match($reg,$strUrl,$arrUrl)) {
Return $this->setError(1,$strUrl);
}else {
//拆解匹配数组
list($tmp, $tmp, $arr['protocol'], $arr['user'], $arr['pass'], $arr['host'], $arr['port'], $arr['path'], $arr['query'], $arr['anchor']) = $arrUrl;
//默认协议
if(!$arr['protocol']) {
$arrUrl[1] = $this->_arrDefaultArrayUrl['protocol'].'://';
}
//设 filename
$arr['file'] = basename($arr['path']);
//默认值
foreach($this->_arrDefaultArrayUrl as $key=>$val) {
if($arr[$key] == ') {
$arr[$key] = $val;
}
}
//默认端口
if(is_null($this->_arrDefaultPort[$arr['protocol']])) {
Return $this->setError(2,$arr['protocol']);
}elseif(!$arr['port']) {
$arr['port'] = $this->_arrDefaultPort[$arr['protocol']];
}
//设 uri
$arr['uri'] = ($arr['path']?$arr['path']:'/') . ($arr['query']?'?'.$arr['query']:') . ($arr['anchor']?'#'.$arr['anchor']:');
//设 url
unset($arrUrl[0]);
unset($arrUrl[2]);
$this->_strUrl = implode(',$arrUrl);
//设 arrurl
$this->_arrUrl = $arr;
Return true;
}
}
function getUrl($enumReturnType = PP_RETURN_ARRAY) {
if($enumReturnType==PP_RETURN_STRING) {
Return $this->_strUrl;
}elseif($enumReturnType==PP_RETURN_ARRAY) {
Return $this->_arrUrl;
}if($enumReturnType==PP_RETURN_ALL) {
Return array($this->_strUrl,$this->_arrUrl);
}else {
Return $this->setError(1001);
}
}
function setRefer($strRef) {
$this->_strRef = trim($strRef);
Return true;
}
function getRefer() {
Return $this->_strRef;
}
function getProxyUrl() {
global $_SERVER;
list($strProcotol) = explode('/',strtolower(trim($_SERVER['SERVER_PROTOCOL'])));
$str = $strProcotol.'://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].
'?u='.urlencode($this->getUrl(PP_RETURN_STRING)).
($this->getRefer()?('&r='.urlencode($this->getRefer())):');
Return $str;
}
function openSocket() {
$arr = $this->getUrl();
$this->_resSocket = @fsockopen($arr['host'],$arr['port'],$intError, $strError, 30);
if(!$this->_resSocket) {
$this->_resSocket = null;
Return $this->setError(3,array($intError, $strError));
}else {
Return true;
}
}
function getRequest() {
Return $this->{'get'.ucfirst($this->_arrUrl['protocol']).'Request'}();
}
function sendRequest() {
Return fwrite($this->_resSocket,$this->getRequest());
}
function flushResponse() {
Return $this->{'flush'.ucfirst($this->_arrUrl['protocol']).'Response'}();
}
function getHttpRequest() {
$arr = $this->getUrl();
$arrRequest = getallheaders();
$arrRequest['Host'] = $arr['host'];
$strRequest = "GET ".$arr['uri']." HTTP/1.1\r\n";
foreach($arrRequest as $key=>$val) {
$strRequest .="$key: $val\r\n";
}
$strRequest .="\r\n";
Return $strRequest;
}
function flushHttpResponse() {
$bolHeader=true;
while (!feof($this->_resSocket)) {
$str = fgets($this->_resSocket, 4096);
if($bolHeader) {
@header($str);
}else {
echo($str);
}
if($bolHeader && $str=="\r\n") {
$bolHeader=false;
@header("Content-type: application/gzip");
@header('Content-Disposition: attachment; filename="'.$this->_arrUrl['file'].'"');
}
}
Return true;
}
function close() {
fclose($this->_resSocket);
$this->_resSocket = null;
Return true;
}
function proxy($strUrl = null,$arrArgv = array()) {
if(!is_null($this->getUrl(PP_RETURN_STRING)) && $this->openSocket() && $this->sendRequest() && $this->flushResponse()) {
echo(123);
$this->close();
}else {
Return false;
}
}
}
if(sizeof($_GET)) {
$strGetArrayName = '_GET';
}elseif(sizeof($HTTP_GET_VARS)) {
$strGetArrayName = 'HTTP_GET_VARS';
}else {
die('
');
}
$strUrl = trim(${$strGetArrayName}['u']);
if($strUrl==') {
die('请输入 url 地址.');
}
//get referer
$strRefTmp = trim(${$strGetArrayName}['r']);
//初始化 proxy 类
$objProxy = new CPhpProxy();
//设置 url 和 refer
$objProxy->setUrl($strUrl);
$objProxy->setRefer($strRef);
//错误输出
if($objProxy->getError()) {
die($objProxy->getError(PP_ERROR_MESSAGE));
}
//echo url for download
if(${$strGetArrayName}['act']=='make') {
die("
点击此处通过 PhpProxy 下载文件
}
//取文件
$objProxy->proxy();
//错误处理
if($objProxy->getError()) {
die($objProxy->getError(PP_ERROR_MESSAGE));
}
?>

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Kedua-dua telefon bimbit vivox100s dan x100 adalah model yang mewakili dalam barisan produk telefon mudah alih vivo, masing-masing mewakili tahap teknologi canggih vivo dalam tempoh masa yang berbeza. Artikel ini akan menjalankan perbandingan terperinci antara kedua-dua telefon mudah alih ini dari segi perbandingan prestasi dan analisis fungsi untuk membantu pengguna memilih telefon mudah alih yang sesuai dengan mereka dengan lebih baik. Mula-mula, mari kita lihat perbandingan prestasi antara vivox100s dan x100. vivox100s dilengkapi dengan yang terbaru

Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Dengan kebangkitan media sosial, WeChat telah menjadi salah satu alat komunikasi yang sangat diperlukan dalam kehidupan seharian orang ramai. Walau bagaimanapun, ramai orang mungkin menghadapi masalah: log masuk ke beberapa akaun WeChat pada masa yang sama pada telefon mudah alih yang sama. Bagi pengguna telefon mudah alih Huawei, tidak sukar untuk mencapai log masuk WeChat dwi Artikel ini akan memperkenalkan cara mencapai log masuk WeChat dwi pada telefon mudah alih Huawei. Pertama sekali, sistem EMUI yang disertakan dengan telefon mudah alih Huawei menyediakan fungsi yang sangat mudah - pembukaan dua aplikasi. Melalui fungsi pembukaan dwi aplikasi, pengguna boleh serentak

1. Gunakan kekunci pintasan win+x untuk membuka menu dan pilih [Command Prompt (Administrator) (A)], seperti yang ditunjukkan di bawah: 2. Selepas memasuki antara muka command prompt, masukkan arahan [ipconfig/flushdns] dan tekan Enter , seperti yang ditunjukkan dalam rajah di bawah: 3. Kemudian masukkan arahan [netshwinsockresetcatalog] dan tekan Enter, seperti yang ditunjukkan dalam rajah di bawah: 4. Akhir sekali masukkan arahan [netshintipreset] dan tekan Enter, mulakan semula komputer dan anda boleh mengakses Internet , seperti yang ditunjukkan dalam rajah di bawah:

Dengan perkembangan pesat Internet, konsep media kendiri telah berakar umbi dalam hati orang ramai. Jadi, apakah sebenarnya media kendiri? Apakah ciri dan fungsi utamanya? Seterusnya, kita akan meneroka isu-isu ini satu demi satu. 1. Apakah sebenarnya media kendiri? Kami-media, seperti namanya, bermakna anda adalah media. Ia merujuk kepada pembawa maklumat yang melaluinya individu atau pasukan boleh mencipta, mengedit, menerbitkan dan menyebarkan kandungan secara bebas melalui platform Internet. Berbeza dengan media tradisional, seperti akhbar, televisyen, radio, dan lain-lain, media kendiri lebih interaktif dan diperibadikan, membolehkan semua orang menjadi pengeluar dan penyebar maklumat. 2. Apakah ciri dan fungsi utama media kendiri? 1. Ambang rendah: Peningkatan media kendiri telah menurunkan ambang untuk memasuki industri media Peralatan yang rumit dan pasukan profesional tidak lagi diperlukan.

Pada 21 Jun, Persidangan Pembangun Huawei 2024 (HDC2024) berkumpul semula di Tasik Songshan, Dongguan. Pada persidangan ini, perkara yang paling menarik perhatian ialah HarmonyOSNEXT secara rasminya melancarkan Beta untuk pembangun dan pengguna perintis, dan secara komprehensif menunjukkan tiga ciri inovatif HarmonyOSNEXT yang "menghancurkan raja" dalam semua senario, perisikan asli dan keselamatan asli. Perisikan asli HarmonyOSNEXT: Membuka era AI baharu Selepas meninggalkan rangka kerja Android, HarmonyOSNEXT telah menjadi sistem pengendalian yang benar-benar bebas daripada Android dan iOS, yang boleh dipanggil kelahiran semula yang tidak pernah berlaku sebelum ini. Di antara banyak ciri baharunya, kecerdasan asli tidak diragukan lagi merupakan ciri baharu yang terbaik boleh membawa perasaan intuitif pengguna dan mengalami peningkatan.

Dalam bidang teknologi baharu, sistem pengendalian baharu sentiasa menarik perhatian ramai. Baru-baru ini, telefon bimbit Honor mengumumkan bahawa mereka akan dinaik taraf kepada Hongmeng OS, sistem pengendalian baharu yang dibangunkan oleh Huawei. Ini sudah pasti berita baik untuk ramai pengguna telefon bimbit Honor. Walau bagaimanapun, ramai pengguna mungkin masih mempunyai keraguan tentang cara untuk menaik taraf kepada sistem Hongmeng. Artikel ini akan menerangkan secara terperinci cara menaik taraf telefon mudah alih Honor kepada sistem Hongmeng untuk membantu pengguna memahami dan mengendalikannya dengan lebih baik. Pertama, untuk menaik taraf telefon Honor kepada sistem Hongmeng, pengguna perlu memastikan telefon disambungkan ke rangkaian dan mempunyai kuasa yang mencukupi. ini

WPS ialah perisian komputer yang mesti ada untuk ramai pengguna Kemas kini biasa kepada versi baharu boleh membolehkan pengguna mendapatkan pengalaman pengguna yang lebih baik dan lebih banyak ciri. Jadi bagaimana untuk menaik taraf versi wps? Terdapat tiga kaedah utama untuk menaik taraf wpsoffice Mari kita lihat di bawah. Kaedah 1: Muat turun versi baharu daripada tapak web rasmi Anda boleh memuat turun versi terkini pakej pemasangan daripada tapak web rasmi WPSOffice. Selepas memasuki tapak web rasmi WPSOffice (https://www.wps.cn/), klik butang "Muat turun", pilih versi yang anda perlu muat turun, dan kemudian ikut arahan untuk memasangnya. Nota: Apabila memasang versi baharu, anda perlu menyahpasang versi lama, jika tidak, ia akan menyebabkan konflik perisian dan menghalang penggunaan biasa. Kaedah 2: Dalam WPSOf

Mi 14 Pro ialah telefon terbaharu Xiaomi, dan ThePaper OS ialah sistem pengendalian baharu yang dibangunkan secara bebas oleh Xiaomi, khusus untuk menyediakan pengalaman pengguna yang lebih lancar dan bijak. Dengan perkembangan teknologi yang berterusan, ThePaper OS juga sentiasa dikemas kini dan dinaik taraf. Begitu ramai pengguna yang menggunakan telefon bimbit Xiaomi buat kali pertama bertanya kepada pengguna Xiaomi 14Pro bagaimana untuk menaik taraf OS ThePaper? Bagaimana untuk menaik taraf Xiaomi Mi 14 Pro kepada Thermal OS? Cara mengemas kini model lain yang menyokong ThePaper OS: 1. Buka aplikasi tetapan telefon anda dan cari pilihan kemas kini sistem. 2. Sistem akan secara automatik mengesan versi sistem semasa dan menggesa apabila versi baharu tersedia untuk dikemas kini. 3. Hanya klik "Kemas Kini Sekarang" dan sistem akan mula memuat turun secara automatik.
