curl не читає ваш PAC-файл: передайте натомість проксі
PAC — це політика на JavaScript; curl потребує кінцевої точки. Запитайте, який проксі політика обирає для вашого URL, передайте його й стежте за NO_PROXY і TLS.
Адреса PAC-файлу й кінцева точка проксі у файлі конфігурації виглядають взаємозамінними, але це не так. Одне — програма політики, яку треба обчислювати для кожного URL; друге — хост і порт, що приймають з'єднання. curl розуміє лише друге. Передавання адреси PAC до --proxy — це категоріальна помилка, яка провалюється заплутаним чином, зазвичай після довгого очікування CONNECT до вебсервера.
Що насправді являє собою кожне
| У вас є | Що це | Що curl з цим робить |
|---|---|---|
http://wpad.corp.example/proxy.pac | JavaScript, який повертає проксі або пряме з'єднання для заданого URL | Завантажує його як файл і на цьому зупиняється |
http://proxy.corp.example:8080 | Слухач, що приймає запити через проксі | Використовує його, включно з CONNECT для цілей HTTPS |
Про це прямо сказано в частих питаннях про curl: curl не надає інтерпретації JavaScript чи PAC. Обгортка навколо curl, що розуміє PAC, може, але сам curl — ні, і жоден прапорець не робить із нього браузер.
Чому браузер працює, а curl — ні
Браузер інтегрується із системною конфігурацією проксі, завантажує PAC-файл і виконує його правила для URL, який ви відкриваєте. Це обчислення і є послуга, яку надає PAC-файл, і воно відбувається всередині браузера, а не у вашому терміналі.
Завантаження PAC-файлу через curl дає лише його текст. Воно не змушує curl виконувати політику, а читання його вручну для пошуку проксі — це ручна версія того самого обчислення з такою самою ймовірністю обрати не ту гілку. Якщо ви його читаєте, читайте оператор return, що відповідає вашому хосту, а не перше ім'я проксі у файлі. У більшості PAC-файлів їх кілька, і лише одна гілка стосується вас.
Для схваленого проксі HTTP і схваленого сервісу HTTPS ілюстративний запит такий:
curl --proxy http://proxy.corp.example:8080 https://service.example.net/status
Перша адреса — слухач проксі, друга — потрібний вам сервіс. Це приклади кінцевих точок, а не тест, який хтось проводив, тож замініть їх на схему, порт і процес автентифікації вашої організації.
Виберіть проксі для цього призначення
Запитайте адміністратора, який проксі політика обирає для потрібного вам URL, а не який проксі належить організації. Правила PAC можуть повертати різні результати для внутрішніх сервісів, публічних сайтів і станів перемикання під час збою, і правило, що сьогодні відповідає вашому URL, після редагування може відповідати іншому.
Якщо робочому процесу потрібно більше ніж один відомий запит, використовуйте статичне налаштування, яке підтримує адміністратор, або схвалену інтеграцію, що розуміє PAC. Жорстке кодування однієї скопійованої адреси працює до дня, коли політика зміниться і ніхто вже не згадає, чому було обрано цю адресу.
Потім подивіться, що успадковує curl. Змінні середовища проксі та NO_PROXY можуть перекрити або виключити переданий проксі, а виключення, що збігається з вашою метою, мовчки надсилає запит напряму. Зберігайте задуману політику, замість того щоб видаляти кожне виключення чи гнати все через одну адресу. Виконайте запит один раз із -v і перевірте, до якої адреси він насправді підключився.
Тримайте дві ідентичності TLS окремо
За проксі HTTPS задіяні два з'єднання TLS: ваше до проксі та з'єднання проксі до призначення. Кожне має власну ідентичність для перевірки, і вимкнення перевірки для будь-якого з них — не виправлення PAC, а друга проблема, додана до першої.
Залиште перевірку ввімкненою і прочитайте отриману помилку. Запит автентифікації проксі, недоступний проксі та відмова сайту — це три різні результати, і лише перший стосується облікових даних. VPN усе ще має забезпечити дозволений шлях до приватного проксі, включно з розв'язанням імен для самого хоста проксі, перш ніж щось із цього вдасться.
Запишіть кінцеву точку, схему, порт, метод автентифікації, виключення та шлях VPN до проксі. Саме цей запис робить наступний запит відтворюваним, і в ньому різниця між знанням свого проксі та здогадками про нього.