PHP Curl не может подключиться к хосту на собственном сервере

У меня есть PHP-скрипт, который использует cURL для доступа к файлу, также расположенному на моем сервере (установлена ​​программа электронного маркетинга). Я написал быстрый скрипт для проверки моей установки cURL, и он не работает, когда указывает на файл на моем собственном сервере. Сценарий:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.mysite.com/test.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$contents = curl_exec($ch);

if($contents) {
    echo $contents;
} else {
    $err = curl_error($ch);
    echo $err;
}

curl_close($ch);

Когда я запускаю этот код, он возвращает ошибку: не удалось подключиться к хосту

Если я изменю URL-адрес на http://www.google.com или любой другой сайт, все будет работать нормально. Кроме того, когда я пытаюсь открыть определенную страницу через cURL на другом сервере, она работает так, как должна. Предположения, которые я делаю из этих тестов, заключаются в том, что PHP cURL установлен и (вроде) работает, и что проблема не в странице, которую пытаются открыть.

Я подумал, что это может быть проблема с портом, поэтому я попытался указать порт с тем же результатом (не подключаясь к хосту). Я пробовал как curl_setopt, так и http://www.mysite.com:80/, чтобы указать порт, который, как я знаю, открыт.

Это заставляет меня поверить, что проблема связана с моей установкой apache, но я не эксперт по apache, и я весь день бился головой с Google, но безрезультатно. Любые идеи, что может вызвать такой конкретный сбой cURL?


person west1737    schedule 10.05.2011    source источник
comment
Вы когда-нибудь решали это? У меня точно такая же проблема, скрипт на моем собственном сервере работает нормально, когда я захожу через браузер, но когда я запускаю cURL для доступа к нему из поддомена, он терпит неудачу с ошибкой 7.   -  person Chud37    schedule 02.08.2013


Ответы (4)


Попробуйте открыть http://www.mysite.com/test.php в веб-браузере. Если работает, то проблема с cURL. Если это не так, проблема либо в вашей сети, либо в конфигурации apache.

Вы можете проверить конфигурацию Apache, убедившись, что он работает в вашей системе. Затем попробуйте telnet <apache server ip> 80 из командной строки. После подключения попробуйте сделать следующее:

GET /test.php HTTP/1.1
Host: www.mysite.com
<2 line breaks>

Если вы получите ответ от apache, то это похоже на проблему с сетью. Убедитесь, что mysite.com разрешается в IP-адрес вашего сервера Apache, и трафик порта 80 может попасть на ваш сервер. Это также может быть проблема с петлевой маршрутизацией вашего маршрутизатора, пытающегося сделать запрос на свой собственный IP-адрес (при условии, что ваш сервер apache находится за маршрутизируемым сетевым соединением, тем же соединением, на котором вы находитесь).

person Jim Rubenstein    schedule 10.05.2011

Столкнулся с той же проблемой, когда мое доменное имя не разрешалось на сервере, что приводило к сбою CURL запросов к самому себе.

Моя проблема заключалась в том, что мой веб-сервер не мог разрешить сам себя из-за некоторых правил брандмауэра (перед веб-сервером стоит балансировщик нагрузки, который блокировал трафик с сервера).

Другими словами, запуск следующей команды на моем сервере

curl -I http://www.mywebserver.com привело к:

$ curl -I http://www.mywebserver.com curl: (7) couldn't connect to host

Обновление файла /etc/hosts на сервере для сопоставления имени домена с локальным IP-адресом решило проблему, и fopen и curl из моих сценариев снова заработали.

person Phil Birnie    schedule 11.11.2015
comment
Я знаю, что этот вопрос был некоторое время назад, но я хотел дать вам голос, так как это было решение, которое сработало для меня после дня выдергивания волос. - person Fergal Andrews; 30.11.2016
comment
Большое спасибо, спустя долгое время это то, что сработало и для меня. У меня был тайм-аут cURL на wordpress каждый раз, когда он пытался получить доступ к API, но монитор запросов говорил, что это какая-то ошибка ssl, хотя я мог скручивать URL-адреса https с терминала. Затем я решил попробовать свой собственный домен, и он также истек по тайм-ауту, это было странно, так как я мог нормально получить доступ к WP API через браузер, оказывается, нужно было только добавить запись в файл hosts для домена с локальным ИП. После этого все заработало. - person Patareco; 19.04.2020

Вы можете пропинговать www.mysite.com ?

Проверьте свой /etc/hosts... возможно, для www.mysite.com указан неверный IP-адрес.

person Alex    schedule 10.05.2011

Я столкнулся с этим и на удаленном веб-сервере. Запустив curl на этом компьютере, я не смог получить доступ к файлам, размещенным на сервере Apache на том же компьютере. Странно, я мог получить доступ к файлу с помощью

curl -O http://example.com/file1.txt

но

curl -0 http://sub.example.com/file1.txt

не сработало.

Я решил эту проблему, добавив отсутствующую DNS-запись на DNS-сервер, работающий на машине. Похоже, что nslookup и т. д. сначала посмотрите на локальный DNS-сервер, прежде чем спрашивать кого-то еще. И поскольку локальный DNS-сервер ответил «не могу найти», curl сдался.

person simne7    schedule 21.03.2017