Используя Apache или Ngnix, я всегда создаю сайты разработки на основе реальных проектов, например, http://project1.loc
которые после добавления в мой .hosts
файл браузер без проблем использует.
Однако, когда я пытаюсь сделать запрос cURL ( http://project1.loc/post.json
) к тому же URL, я никогда не получаю ничего, кроме тайм-аута. Я предполагаю, что cURL не заботится о моих пользовательских хостах и отправляется прямо на сервер имен для получения информации.
Как я могу это исправить?
ОБНОВЛЕНИЕ Я установил собственный заголовок «HOST: http: //project1.loc », и теперь я получаю 400 ошибок, но они возникают мгновенно, поэтому я предполагаю, что cURL, по крайней мере, использует файл hosts ...
РЕДАКТИРОВАТЬ: хотя в настоящее время это принятый ответ, читатели могут найти этот другой ответ пользователя Джона Харта более адаптированным к своим потребностям. Он использует опцию, которая, по словам пользователя Кена , была представлена в версии 7.21.3 ( выпущенной в декабре 2010 года , то есть после этого первоначального ответа).
В отредактированном вопросе вы используете URL-адрес в качестве имени хоста, тогда как это должно быть только имя хоста.
Пытаться:
где
project1.loc
- это просто имя хоста, а127.0.0.1
- целевой IP-адрес.(Если вы используете завиток из библиотеки , а не в командной строке, убедитесь , что вы не ставите
http://
вHost
заголовке) .источник
HOST
заголовок.Host
не наHOST
всякий случай (хотя я думаю, что регистр не должен учитываться). Как я уже сказал, убедитесь, что вы используете только имя хоста вHost
заголовке, ничего больше (нетhttp://
и нет/something
после). Как вы настроили файл hosts?Либо используйте настоящее полное доменное имя (например
dev.yourdomain.com
), указывающее на него,127.0.0.1
либо попробуйте отредактировать соответствующий файл hosts (обычно / etc / hosts в средах * nix).источник
system32/drivers/etc/hosts
Похоже, это не редкость.
Сначала проверьте это .
Если это не поможет, вы можете установить локальный DNS-сервер в Windows, например этот . Настройте Windows на использование localhost в качестве DNS-сервера. Этот сервер можно настроить так, чтобы он был авторитетным для любых фальшивых доменов, которые вам нужны, и для пересылки запросов на реальные DNS-серверы для всех других запросов.
Я лично считаю, что это перебор, и я не понимаю, почему файл hosts не работает. Но это должно решить вашу проблему. Убедитесь, что вы также настроили обычные DNS-серверы в качестве серверов пересылки.
источник
Действительно ли сервер получает запросы и правильно ли вы обрабатываете имя хоста (псевдоним)?
Проверьте журнал своего веб-сервера, чтобы узнать, как поступил запрос ...
curl имеет параметры для сброса отправленного запроса и полученного ответа, это называется трассировкой, которая будет сохранена в файл.
--trace
Если вам не хватает информации о хосте или заголовке - вы можете принудительно использовать эти заголовки с помощью параметра конфигурации.
Я бы получил запрос curl, работающий в командной строке, а затем попытался бы реализовать на PHP.
опция конфигурации
-K / - конфигурации
параметры, относящиеся к curl, находятся здесь
--trace Включает полный дамп трассировки всех входящих и исходящих данных, включая описательную информацию, в указанный выходной файл. Используйте «-» в качестве имени файла, чтобы вывод был отправлен на стандартный вывод.
-K / - config Укажите, из какого файла конфигурации читать аргументы curl. Файл конфигурации - это текстовый файл, в который могут быть записаны аргументы командной строки, которые затем будут использоваться, как если бы они были записаны в самой командной строке. Параметры и их параметры должны быть указаны в одной строке файла конфигурации, разделенные пробелом, двоеточием, знаком равенства или любой их комбинацией (однако предпочтительным разделителем является знак равенства). Если параметр должен содержать пробелы, параметр должен быть заключен в кавычки. В двойных кавычках доступны следующие escape-последовательности: \, \ ", \ t, \ n, \ r и \ v. Обратная косая черта перед любой другой буквой игнорируется. Если первый столбец в строке конфигурации - '#' символ, остальная часть строки будет рассматриваться как комментарий.
источник
http://domain.loc/users/getSettings.xml
и это то, что показал access.log127.0.0.1 - - [09/Aug/2010:11:42:55 -0500] "POST /users/getSettings.xml HTTP/1.1" 499 0 "-" "-"
и сообщил curl.Operation timed out after 10000 milliseconds with 0 bytes received
Итак, я предполагаю, что cURL фактически обрабатывает vhost, поскольку access.log показывает запрос. С другой стороны, теперь он может попасть в правильный домен ...Делая запрос
Результатом является
-H
файл журнала, содержащий:Файл моих хостов выглядит так:
источник
-H
предназначен для полного заголовка, а не только для хоста, поэтому используйте-H 'Host: project1.loc'
. Кроме того, несмотря на эту проблему, этот запрос, похоже, работает на правильном хосте (hosts
по крайней мере, правильно получен из вашего файла с помощью curl в командной строке). То, что не работает (403), похоже на проблему аутентификации / авторизации, поэтому ваш сервер, похоже, блокирует эти запросы. Я бы посоветовал исправить для этого конфигурацию сервера.Для настройки виртуальных хостов на http-серверах Apache, которые еще не подключены через DNS, мне нравится использовать:
Где host-name - это IP-адрес или DNS-имя машины, на которой работает веб-сервер. Это также хорошо работает для https-сайтов.
источник