PHP Curl не может подключиться к хосту на собственном сервере - PullRequest
3 голосов
/ 10 мая 2011

У меня есть 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?

Ответы [ 4 ]

2 голосов
/ 12 ноября 2015

Сталкивался с той же проблемой, когда мое доменное имя не разрешалось на сервере, вызывая сбой запросов 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 из моих сценариев снова работали.

1 голос
/ 10 мая 2011

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

Проверьте ваши / etc / hosts ... возможно, для www.mysite.com.

указан неправильный IP
0 голосов
/ 21 марта 2017

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

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

, но

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

не работал.

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

0 голосов
/ 10 мая 2011

Попробуйте открыть 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 находится за маршрутизируемым сетевым соединением, то же соединение, что и вы).

...