PHPackages                             akrez/http-proxy - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. akrez/http-proxy

ActiveLibrary[HTTP &amp; Networking](/categories/http)

akrez/http-proxy
================

Akrez http proxy

v6.0.0(3mo ago)6191PHPPHP ^8.0

Since Dec 13Pushed 2mo ago1 watchersCompare

[ Source](https://github.com/akrez/http-proxy)[ Packagist](https://packagist.org/packages/akrez/http-proxy)[ RSS](/packages/akrez-http-proxy/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (2)Versions (7)Used By (0)

راه‌اندازی فیلترشکن با هاست اشتراکی PHP
=======================================

[](#راه‌اندازی-فیلترشکن-با-هاست-اشتراکی-php)

[![](flow.svg)](flow.svg)

چرا از هاست اشتراکی PHP استفاده کنیم؟
-------------------------------------

[](#چرا-از-هاست-اشتراکی-php-استفاده-کنیم)

- **قیمت مناسب:**
    هاست‌های اشتراکی معمولاً هزینه‌ی بسیار کمتری نسبت به سرورهای اختصاصی دارند و این موضوع برای بسیاری از کاربران جذاب است.
- **IP‌های تمیز:**
    هاست‌ها معمولاً از IP‌های تمیز و معتبر استفاده می‌کنند که می‌تواند در عملکرد بهتر فیلترشکن مؤثر باشد.
- **پهنای باند نامحدود:**
    بسیاری از سرویس‌دهندگان هاستینگ پهنای باند نامحدود ارائه می‌دهند که این ویژگی برای فیلترشکن بسیار مناسب است، زیرا بدون نگرانی از محدودیت پهنای باند می‌توانید از اینترنت استفاده کنید.
- **راه‌اندازی راحت‌تر:**
    مدیریت هاست اشتراکی و راه‌اندازی یک اسکریپت ساده PHP بسیار آسان‌تر از مدیریت سرور اختصاصی یا مجازی است.

چه مشکلاتی وجود دارد؟
---------------------

[](#چه-مشکلاتی-وجود-دارد)

- **محدودیت پروتکل‌ها:**
    هاست‌های اشتراکی ممکن است فقط از پروتکل‌های محدودی پشتیبانی کنند که این موضوع می‌تواند عملکرد فیلترشکن را تحت تأثیر قرار دهد.
- **مناسب نبودن برای موبایل:**
    این روش هنوز برای گوشی‌های همراه بهینه‌سازی نشده است و نیاز به توسعه بیشتری دارد.
- **پیچیدگی برای کاربران عادی:**
    استفاده از این نوع فیلترشکن ممکن است برای کاربران عادی کمی گیج‌کننده باشد و نیاز به راهنمایی بیشتری داشته باشد.

چطور کار می‌کند؟
----------------

[](#چطور-کار-می‌کند)

به طور کلی این روش مشابه عملکرد یک **HTTP Proxy** است، اما به دلیل محدودیت‌ها، تفاوت‌هایی در نحوه اجرا وجود دارد:

1. درخواست اصلی دستکاری می‌شود تا بتوان آن را به هاست پراکسی ارسال کرد.
2. پس از رسیدن درخواست دستکاری‌شده به هاست پراکسی، درخواست اصلی بازیابی شده، پردازش می‌شود و پاسخ به کاربر بازگردانده می‌شود.

```
==OriginalRequest==> (local http proxy server: manipulate request to change method and url) ==ManipulatedRequest==> (proxy shared host: recover original request using script and resolve it and return response) ==Response==>
```

بیایید با یک مثال بررسی کنیم
----------------------------

[](#بیایید-با-یک-مثال-بررسی-کنیم)

فرض کنید می‌خواهیم درخواست زیر را به آدرس `www.blocked.com/sensored/content.json` ارسال کنیم:

```
OPTIONS /sensored/content.json HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.blocked.com
Content-Type: application/json

{ "name": "John Doe", "email": "john.doe@example.com" }
```

### محدودیت‌ها

[](#محدودیت‌ها)

- **محدودیت در متد:**
    شاید متد اصلی (مانند `OPTIONS`) روی هاست پشتیبانی نشود؛ پس باید قبل از ارسال، متد را به `POST` تغییر دهیم و در هاست، دوباره آن را بازیابی کنیم.
- **هدر Host:**
    هدر `Host` درخواست اصلی با میزبان پراکسی متفاوت است و باید جایگزین شود.

### پس چه راه‌حلی داریم؟

[](#پس-چه-راه‌حلی-داریم)

آدرس درخواست را طوری تغییر می‌دهیم که به هاست پراکسی برسد. مثلاً:

```
https://www.blocked.com/sensored/content.json
```

تبدیل می‌شود به:

```
https://www.proxy-host.com/inline.php/https_OPTIONS/www.blocked.com/sensored/content.json
```

پس در این حالت، درخواست زیر به جای درخواست اصلی (در این مثال یعنی درخواست بالا) ارسال می‌شود:

```
POST /inline.php/https_OPTIONS/www.blocked.com/sensored/content.json HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Content-Type: application/json
Host: www.proxy-host.com

{ "name": "John Doe", "email": "john.doe@example.com" }
```

### توضیح بخش‌های URL

[](#توضیح-بخش‌های-url)

بخشتوضیح`https://www.proxy-host.com/inline.php`مسیر اسکریپت روی هاست اشتراکی. می‌تواند به عنوان توکن برای هر کاربر نیز عمل کند. یعنی اسکریپت میتواند روی فایل `unpredictable_personal_token.php` به جای `inline.php` هاست شود`https_OPTIONS`بخش کانفیگ: پروتکل و متد. با `_` جدا می‌شوند و اختیاری‌اند. می‌توانید `debug` هم اضافه کنید (`https_OPTIONS_debug`).`www.blocked.com/sensored/content.json`آدرس اصلی درخواست همراه با تمام پارامترها.### چرا فکر میکنی این راه بهتره؟

[](#چرا-فکر-میکنی-این-راه-بهتره)

وقتی تغییرات را فقط توی آدرس اضافه کنیم با کمترین تغییرات میتونیم فیلتر یا تحریم را دور بزنیم. مثلا یک کتابخونه را در نظر بگیرید که با آدرس `https://api.telegram.org` در تعامل هست و این آدرس را در متغیر `$baseUrl` ذخیره کرده. حالا فقط کافیه به نحوی `$baseUrl` را به `https://www.proxy-host.com/inline.php/https/api.telegram.org` تغییر بدید. بدون اینکه نیازی باشه هدرها را دستکاری کنید. همین!

آیا باید دستی URL‌ها را تغییر دهیم؟
-----------------------------------

[](#آیا-باید-دستی-url‌ها-را-تغییر-دهیم)

خیر. برای این کار از **MitmProxy** استفاده می‌کنیم تا درخواست‌ها به صورت خودکار دستکاری شوند. فایل‌های مورد نیاز در مسیر `client/addons.py` قرار دارند.

### مراحل نصب و راه‌اندازی

[](#مراحل-نصب-و-راه‌اندازی)

ریپوزیتوری را کلون کنید تا فایل‌ها را در اختیار داشته باشید.

یکی از نسخه‌های پرتابل MitmProxy را از  دانلود کرده و فایل `mitmdump.exe` را به پوشه `client` منتقل کنید.

یک بار فایل mitmdump.exe را اجرا کنید تا فایل‌های گواهی امنیتی لازم ایجاد شوند.

برای نصب گواهی، دستور زیر را در Command Prompt (خط فرمان ویندوز) اجرا کنید:

```
certutil -addstore root "%USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.cer"
```

برای مرورگر فایرفاکس، بر اساس راهنمای رسمی MitmProxy، مراحل اضافی را انجام دهید.

فایل addons.py را باز کنید و متغیر config را با تنظیمات مورد نیاز پر کنید.

در نهایت، با پارامترهای زیر MitmProxy را اجرا کنید:

```
mitmdump.exe -s addons.py
```

در تنظیمات سیستم ویندوز، پراکسی را روی `127.0.0.1` و پورت را برابر `local_server_port` (اینجا 8080) قرار دهید.

برای هاست باید چه کاری انجام دهیم؟
----------------------------------

[](#برای-هاست-باید-چه-کاری-انجام-دهیم)

دستور `composer require akrez/http-proxy` را اجرا کنید تا پوشه `vendor` ساخته بشه حالا یک فایل به اسم مثلا `inline.php` ایجاد کنید و کد زیر را در اون کپی کنید. پوشه `vendor` و `inline.php` را روی هاست آپلود کنید.

```
