تنظیم IP پراکسی برای درخواست Guzzle
از گزینهٔ proxy هر درخواست در Guzzle استفاده کنید و مهلت اتصال وابسته به handler و رفتار فهرست صریح دور زدن را بشناسید.
گزینهٔ proxy در Guzzle یک URL کامل نقطهٔ اتصال میپذیرد. وقتی فقط همان عملیات باید از IP انتخابی استفاده کند، آن را روی درخواست تنظیم کنید.
<?php
require __DIR__ . '/vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://example.com/', [
'proxy' => 'http://203.0.113.10:8080',
'connect_timeout' => 5,
'timeout' => 15,
'http_errors' => false,
]);
echo $response->getStatusCode(), PHP_EOL;
echo (string) $response->getBody();
مثال فرض میکند Guzzle 7 از طریق Composer نصب است. نشانی مستندات را با پراکسی HTTP واقعی ارائهدهنده یا فهرست پروکسیهای HTTP عوض کنید. مقصد را در URL درخواست نگه دارید: پراکسی واسطه است، نه منبعی که بارگیری میشود.
اینجا http_errors برابر false است تا پاسخ خطای HTTP برای بررسی در دسترس بماند. شکست اتصال همچنان استثنای انتقال ایجاد میکند. بنابراین تونل HTTPS ردشده هنگام راهاندازی ممکن است پیش از دریافت شیء پاسخ عادی سایت شکست بخورد.
اگر محدودیت اتصال رفتار متفاوتی دارد، handler را بررسی کنید
Guzzle میتواند handlerهای HTTP متفاوتی به کار ببرد. مستندات میگوید handler داخلی cURL از connect_timeout پشتیبانی میکند. handler سفارشی یا محیط بدون PHP cURL لزوماً معادل نیست. پیش از فرض مؤثر بودن گزینهٔ مهلت کپیشده، handler برنامه را بررسی کنید.
تنظیم timeout کلی هم مفید است. مدخلهای فهرست رایگان ممکن است بین بررسیها از پاسخ دادن بازبمانند و مقدار پیشفرض مهلت مناسبی برای درخواست نیازمند پایان سریع نیست.
استفاده از نگاشت پراکسی
نگاشت امکان انتخاب مسیر بر اساس طرح مقصد و ارائهٔ صریح میزبانهای دورزنندهٔ پراکسی را میدهد:
'proxy' => [
'http' => 'http://203.0.113.10:8080',
'https' => 'http://203.0.113.10:8080',
'no' => [],
],
این آرایه را جای گزینهٔ رشتهای بگذارید. کلید HTTPS مقصدهای HTTPS را انتخاب میکند؛ مقدار HTTP آن همچنان شنوندهٔ پراکسی را توصیف میکند. پروتکل شنود متفاوت به تنظیم نقطهٔ اتصال متفاوت نیاز دارد.
وقتی گزینهٔ proxy درخواست را خودتان میدهید، Guzzle انتظار دارد مقادیر no موردنظر را نیز بدهید، نه اینکه خودکار از NO_PROXY کپی کند. فهرست خالی برای آزمایش جداگانهٔ پراکسی مفید است. اگر برنامه قواعد عمدی دور زدن دارد، آنها را صریح نگه دارید.