Запрос на IP адрес через curl

Ser_alt

Новичок
Нигде не могу найти ответ на казалось бы элементарный вопрос - как отправить запрос не на доменное имя а на ip адрес? Прежде всего уточняю что curl на сервере установлен, php версии 5.6.38, а сам запрос ПРОХОДИТ через постман и возврашает страничку. т.е проблема может быть только в коде или в настройках локального сервера. Итак код :

Код:
$ch = curl_init('1.1.1.1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('host:mysite.ru'));
$html = curl_exec($ch);
$error = curl_error($ch);
echo $html;
echo "<br>".$error;
ошибка :

Failed to connect to 1.1.1.1 port 80: Connection timed out

должен сказать что с ресурсами работающими по http проблем нет, только с https, и самое главное - запрос в постмане работает! В чем тут может быть дело ? 2 день не могу разобраться, буду благодарен за любую подсказку. Спасибо.
 

Ser_alt

Новичок
Вы не поняли, мой код нормально работает с http но не с https. указание порта 443 не решение.
 

WMix

герр M:)ller
Партнер клуба
Код:
$ php -a
Interactive mode enabled

php > $ch = curl_init();
php > curl_setopt_array($ch, [
php ( \CURLOPT_URL => 'https://1.1.1.1'
php ( ]);
php > print_r(curl_exec($ch));
<!DOCTYPE html><html lang="en-US" prefix="og: http://ogp.me/ns#"><head><title>1.1.1.1 — the Internet’s Fastest, Privacy-First DNS Resolver</title><meta charset="utf-8"><!--|
............................................................
.........1............1............1............1...........
........11...........11...........11...........11...........
.......111..........111..........111..........111...........
......1111.........1111.........1111.........1111...........
........11...........11...........11...........11...........
........11...........11...........11...........11...........
........11...........11...........11...........11...........
........11...........11...........11...........11...........
........11...........11...........11...........11...........
........11...........11...........11...........11...........
........11...........11...........11...........11...........
 

Ser_alt

Новичок
Код:
$ php -a
Interactive mode enabled

php > $ch = curl_init();
php > curl_setopt_array($ch, [
php ( \CURLOPT_URL => 'https://1.1.1.1'
php ( ]);
php > print_r(curl_exec($ch));
<!DOCTYPE html><html lang="en-US" prefix="og: http://ogp.me/ns#"><head><title>1.1.1.1 — the Internet’s Fastest, Privacy-First DNS Resolver</title><meta charset="utf-8"><!--|
............................................................
.........1............1............1............1...........
........11...........11...........11...........11...........
.......111..........111..........111..........111...........
......1111.........1111.........1111.........1111...........
........11...........11...........11...........11...........
........11...........11...........11...........11...........
........11...........11...........11...........11...........
........11...........11...........11...........11...........
........11...........11...........11...........11...........
........11...........11...........11...........11...........
........11...........11...........11...........11...........
В данном случае я не имел в виду конкретно 1.1.1.1/ У меня ip адрес совсем другой, еденицы просто как пример.
 

WMix

герр M:)ller
Партнер клуба
мне кажется это не столь важно, ошибка не то чтоб в коде, ошибка в понимании, тут тебе никто не поможет, если сам себе не поиможешь!
Код:
$ch = curl_init(); curl_setopt_array($ch, [\CURLOPT_URL => 'https://127.0.0.1', \CURLOPT_SSL_VERIFYHOST=> false, \CURLOPT_SSL_VERIFYPEER=> false]); print_r(curl_exec($ch));

1
php > print_r(curl_getinfo($ch));
Array
(
    [url] => https://127.0.0.1/
    [content_type] => text/html; charset=UTF-8
    [http_code] => 500
    [header_size] => 380
    [request_size] => 48
    [filetime] => -1
    [ssl_verify_result] => 18
    [redirect_count] => 0
    [total_time] => 0.906862
    [namelookup_time] => 1.8E-5
    [connect_time] => 0.000149
    [pretransfer_time] => 0.034499
    [size_upload] => 0
    [size_download] => 2
    [speed_download] => 2
    [speed_upload] => 0
    [download_content_length] => 2
    [upload_content_length] => -1
    [starttransfer_time] => 0.906841
    [redirect_time] => 0
    [redirect_url] =>
    [primary_ip] => 127.0.0.1
    [certinfo] => Array
        (
        )

    [primary_port] => 443
    [local_ip] => 127.0.0.1
    [local_port] => 54790
)
 

Ser_alt

Новичок
мне кажется это не столь важно, ошибка не то чтоб в коде, ошибка в понимании, тут тебе никто не поможет, если сам себе не поиможешь!
Понимании чего ? Вы сами то понимаете, что ваш код делает то же что и мой, в первом сообщении, только установка опций выполнена иначе. Кстати при попытке обратиться к локалхосту 127.0.0.1 получаю вот такую страницу :

https://imgur.com/a/vm3exz8
 

WMix

герр M:)ller
Партнер клуба
нет, в моем случае я точно знаю по какому протоколу идет коммуникация, также он показывает что даже с самописным сертификатом это работает
в твоем же коде протокол отсутствует
If the given URL is missing a scheme name (such as "http://" or "ftp://" etc) then libcurl will make a guess based on the host. If the outermost sub-domain name matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol will be used, otherwise HTTP will be used. Since 7.45.0 guessing can be disabled by setting a default protocol, see CURLOPT_DEFAULT_PROTOCOL for details.
 

Ser_alt

Новичок
нет, в моем случае я точно знаю по какому протоколу идет коммуникация, также он показывает что даже с самописным сертификатом это работает
в твоем же коде протокол отсутствует
говорю же, я уже пробовал явно указывать протокол в хосте, и номер порта тоже :


Код:
$ch = curl_init();
    curl_setopt_array($ch, [\CURLOPT_URL => 'https://1.1.1.1/', \CURLOPT_SSL_VERIFYHOST=> false, \CURLOPT_SSL_VERIFYPEER=> false]);
    print_r(curl_exec($ch));
    $err = curl_error($ch);
    echo "<br>Errors = " . $err;
    $info = curl_getinfo($ch);
Результат :


Код:
Errors = Failed to connect to 1.1.1.1 port 443: Connection timed out
array(26) {
 ["url"]=> string(23) "https://1.1.1.1/"
 ["content_type"]=> NULL
 ["http_code"]=> int(0)
 ["header_size"]=> int(0)
 ["request_size"]=> int(0)
 ["filetime"]=> int(-1)
 ["ssl_verify_result"]=> int(0)
 ["redirect_count"]=> int(0)
 ["total_time"]=> float(126.329075)
 ["namelookup_time"]=> float(8.6E-5)
 ["connect_time"]=> float(0)
 ["pretransfer_time"]=> float(0)
 ["size_upload"]=> float(0)
 ["size_download"]=> float(0)
 ["speed_download"]=> float(0)
 ["speed_upload"]=> float(0)
 ["download_content_length"]=> float(-1)
 ["upload_content_length"]=> float(-1)
 ["starttransfer_time"]=> float(0)
 ["redirect_time"]=> float(0)
 ["redirect_url"]=> string(0) ""
 ["primary_ip"]=> string(0) ""
 ["certinfo"]=> array(0) { }
 ["primary_port"]=> int(0)
 ["local_ip"]=> string(0) "" ["local_port"]=> int(0)
}
 

WMix

герр M:)ller
Партнер клуба
а он вообще пингуется?
Код:
$ ping 1.1.1.1
 

Ser_alt

Новичок
а он вообще пингуется?
Код:
$ ping 1.1.1.1
Вопрос - пингуется кем именно?
В постмане мне приходил корректный ответ на запрос:

Код:
GET / HTTP/1.1
URL: https://1.1.1.1/
Headers : Host: mysite.ru
Все как положено, и тело и заголовки и код, все вернул.


Через telnet тоже подключился. а с curl -ом второй день не могу понять что нужно.
 

WMix

герр M:)ller
Партнер клуба
зайди на тот сервер где стоит пхп и отдай эту команду
Код:
$ ping 1.1.1.1
 

WMix

герр M:)ller
Партнер клуба
ну, настраивай соеденение, что тут поделаешь
 

AnrDaemon

Продвинутый новичок
Если из консоли curl не может открыть адрес, то как его сможет открыть из PHP?
 

Ser_alt

Новичок
Если из консоли curl не может открыть адрес, то как его сможет открыть из PHP?
Как может быть, что хост не пингуется (не с сервера не с локальной машины), curl открыть соединение с ним не может, но postman нормально отправляет запрос и принимает ответ да и telnet тоже подключается ?:)
 
Сверху