Сделать запрос на явно заданный IP-адрес, но использовать явно заданное имя хоста для проверки SSL?

Есть ли способ сообщить одновременноGuzzleHttp\Client:

  • отправить запрос на явно заданный IP-адрес и
  • «притворяться» с целью проверки SSL, что запрос делается на определенное имя хоста?

По причинам, выходящим за рамки этого вопроса, я не можем просто передаю «https://some.host.name/uri» в качестве URL-адреса запроса. Я должен передаю https://<некоторый-числовой-IP>/uri» и устанавливаю заголовок Host. Однако, когда я это делаю, Guzzle игнорирует заголовок Host для проверки узла SSL и однорангового узла и пытается использовать числовой IP-адрес, что терпит неудачу.

Как получить WhatIWant™?

Можете ли вы использовать /etc/hosts, чтобы переопределить DNS для some.host.name на правильный IP?

ceejayoz 17.05.2019 21:23

Нет, по нескольким причинам: мне нужны подстановочные знаки, а IP может измениться (но будет известно в момент запроса). Обычно я предпочитаю решения, содержащиеся в GuzzleHttp. Я выберу решение, включающее настройку DNS, только в том случае, если окончательно доказано, что решение только для Guzzle невозможно.

Szczepan Hołyszewski 17.05.2019 21:26

Похоже на недостаток дизайна, но почему бы после определения IP $host = gethostbyaddr($ip); не использовать $host?

AbraCadaver 17.05.2019 21:29

Нет, имя хоста дано, потому что сертификаты.

Szczepan Hołyszewski 17.05.2019 21:30
По причинам, которые выходят за рамки этого вопроса, чтобы получить какую-либо помощь, она должна быть в рамках вопроса, иначе вы только что построили непригодную для использования систему.
AbraCadaver 17.05.2019 21:32

Нет, ограничения абсолютно ясны: 1) имя хоста дается при каждом запросе, но может меняться от запроса к запросу; 2) IP-адрес дается во время каждого запроса, но может меняться от запроса к запросу, 3) необходимо заставить GuzzleHttp вести себя как как будто, имя хоста сопоставлено с IP-адресом с DNS-клиентом, который использует; 4) следует избегать фактической настройки DNS для этой цели. Решение, удовлетворяющее этим ограничениям, либо объективно существует, либо объективно не существует. Все остальное действительно выходит за рамки этого вопроса.

Szczepan Hołyszewski 17.05.2019 21:36

Вас спрашивают о причинах, потому что это очень похоже на проблема XY. Знание причин может привести вас к лучшему решение, чем тот, который вы решили, является единственным вариантом.

ceejayoz 17.05.2019 22:08

Это мая может быть проблемой XY, но мой опыт показывает, что на самом деле придерживаться Y в большинстве случаев является лучшей стратегией, учитывая все обстоятельства. В частности, стоит подумать о том, чтобы не тратить недели или месяцы на смену парадигмы с Y на Y'.

Szczepan Hołyszewski 17.05.2019 22:23

Вкратце: вопрос о том, является ли проблема проблемой XY, следует задавать только после Y окончательно и авторитетно исключается как возможное решение, не раньше и не вместо.

Szczepan Hołyszewski 17.05.2019 22:32

Наш опыт показывает, что это не так. Вот почему Википедия называет это «коммуникативная проблема», существует xyproblem.info и существует метапоток.

ceejayoz 17.05.2019 22:39

Согласен не согласиться.

Szczepan Hołyszewski 17.05.2019 22:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
11
1 119
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Несмотря на все разговоры о «проблеме XY» в комментариях, это оказалось на 100% чистой «проблемой Y», и вот решение:

$client = new GuzzleHttp\Client([
    'curl' => [CURLOPT_RESOLVE => ['fakedomain.dev:80:127.0.0.1']],
]);

Другие вопросы по теме