Есть ли способ сообщить одновременноGuzzleHttp\Client
:
По причинам, выходящим за рамки этого вопроса, я не можем просто передаю «https://some.host.name/uri» в качестве URL-адреса запроса. Я должен передаю https://<некоторый-числовой-IP>/uri» и устанавливаю заголовок Host
. Однако, когда я это делаю, Guzzle игнорирует заголовок Host
для проверки узла SSL и однорангового узла и пытается использовать числовой IP-адрес, что терпит неудачу.
Как получить WhatIWant™?
Нет, по нескольким причинам: мне нужны подстановочные знаки, а IP может измениться (но будет известно в момент запроса). Обычно я предпочитаю решения, содержащиеся в GuzzleHttp. Я выберу решение, включающее настройку DNS, только в том случае, если окончательно доказано, что решение только для Guzzle невозможно.
Похоже на недостаток дизайна, но почему бы после определения IP $host = gethostbyaddr($ip);
не использовать $host
?
Нет, имя хоста дано, потому что сертификаты.
Нет, ограничения абсолютно ясны: 1) имя хоста дается при каждом запросе, но может меняться от запроса к запросу; 2) IP-адрес дается во время каждого запроса, но может меняться от запроса к запросу, 3) необходимо заставить GuzzleHttp вести себя как как будто, имя хоста сопоставлено с IP-адресом с DNS-клиентом, который использует; 4) следует избегать фактической настройки DNS для этой цели. Решение, удовлетворяющее этим ограничениям, либо объективно существует, либо объективно не существует. Все остальное действительно выходит за рамки этого вопроса.
Вас спрашивают о причинах, потому что это очень похоже на проблема XY. Знание причин может привести вас к лучшему решение, чем тот, который вы решили, является единственным вариантом.
Это мая может быть проблемой XY, но мой опыт показывает, что на самом деле придерживаться Y в большинстве случаев является лучшей стратегией, учитывая все обстоятельства. В частности, стоит подумать о том, чтобы не тратить недели или месяцы на смену парадигмы с Y на Y'.
Вкратце: вопрос о том, является ли проблема проблемой XY, следует задавать только после Y окончательно и авторитетно исключается как возможное решение, не раньше и не вместо.
Наш опыт показывает, что это не так. Вот почему Википедия называет это «коммуникативная проблема», существует xyproblem.info и существует метапоток.
Согласен не согласиться.
Несмотря на все разговоры о «проблеме XY» в комментариях, это оказалось на 100% чистой «проблемой Y», и вот решение:
$client = new GuzzleHttp\Client([
'curl' => [CURLOPT_RESOLVE => ['fakedomain.dev:80:127.0.0.1']],
]);
Можете ли вы использовать
/etc/hosts
, чтобы переопределить DNS дляsome.host.name
на правильный IP?