Перейти к содержимому

Curl выбрать с какого ip делать запрос

  • автор:

curl обратиться к url по ip

Возможно ли обратиться с помощью curl к урл http://example.com игнорируя днс, задав непосредсвенно ip адресс. Умеет ли curl такое?

evi9
12.10.11 18:40:28 MSK

curl -v 192.0.43.10 блджад

anonymous
( 12.10.11 19:15:05 MSK )

самое веселое тут то что ип адрес может выдать совсем не то что вы хотите, по сути получаются два разных сайта, поэтому того что вы хотите не существует

anton9121
( 12.10.11 19:50:08 MSK )

Можно (http://curl.haxx.se/libcurl/c/curl_easy_setopt.html). Библиотека поддерживает возможность, утилита тоже должна.

sched ★
( 12.10.11 19:52:18 MSK )
Ответ на: комментарий от anton9121 12.10.11 19:50:08 MSK

kostian ★★★★☆
( 12.10.11 19:55:17 MSK )

Хм. А если указать ему IP-адрес?

Othniel
( 13.10.11 00:52:36 MSK )
Ответ на: комментарий от kostian 12.10.11 19:55:17 MSK

> -H «Host:» так не работает(

evi9
( 13.10.11 10:37:23 MSK ) автор топика
Ответ на: комментарий от evi9 13.10.11 10:37:23 MSK

nc -l -p 1234 & curl -i -H "Host: www.example.com" localhost:1234 [2] 3110 GET / HTTP/1.1 User-Agent: curl/7.21.7 (x86_64-pc-linux-gnu) libcurl/7.21.7 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 libssh2/1.2.8 librtmp/2.3 Accept: */* Host: www.example.com 

kostian ★★★★☆
( 13.10.11 11:07:43 MSK )
Ответ на: комментарий от anton9121 12.10.11 19:50:08 MSK

А чо, порты отменили?

slackwarrior ★★★★★
( 13.10.11 11:09:26 MSK )
Ответ на: комментарий от kostian 13.10.11 11:07:43 MSK

curl -i -H «Host: linux.org.ru» 217.76.32.61:80

 HTTP/1.1 302 Moved Temporarily Server: Apache-Coyote/1.1 Location: http://www.linux.org.ru/ Content-Length: 0 Date: Thu, 13 Oct 2011 12:50:36 GMT 

Выдает статус 302, а почему не 200 ?

evi9
( 13.10.11 16:55:17 MSK ) автор топика
Ответ на: комментарий от evi9 13.10.11 16:55:17 MSK

Мне необходимо проверить доступность виртуального хоста, получится это сделать через curl?

evi9
( 13.10.11 16:58:03 MSK ) автор топика
Ответ на: комментарий от evi9 13.10.11 16:55:17 MSK

По тому, что с вхоста linux.org.ru сделан 302 редирект на www.linux.org.ru
Добавь ключ -L или указывай основной вхост.

kostian ★★★★☆
( 13.10.11 18:33:39 MSK )
Ответ на: комментарий от kostian 13.10.11 18:33:39 MSK

да, действительно с ключем -L работает, но запись Host: не делает того что мне нужно, запускаю:

 $ curl -L -i -H "Host: linux.org.ru" 217.76.32.61:80 -o /dev/null --silent --write-out % 200 
 $ curl -L -i -H "Host: example.com" 217.76.32.61:80 -o /dev/null --silent --write-out % 200 

Видим коды «200», тогда как во втором случае хоста example.com не существует. Каким ключем можно проверить валидность существования и отклика виртульного хоста на определенном ip?

evi9
( 13.10.11 20:37:41 MSK ) автор топика
Ответ на: комментарий от evi9 13.10.11 20:37:41 MSK

Никаким, ИМХО. В большинстве (если не во всех) веб-серверов. поддерживающих virtual host’ы, есть такое понятие как default site. Если пришёл запрос с неизвестным именем хоста, будет открыт default site

Как отправить запрос через определенный интерфейс?

На сервере есть 4 интерфейса на которых висит интернет eth0 eth1 eth2 eth3
Задача написать ПО которое будет делать запросы через определенный интерфейс.

Вообще вопрос, как отправить curl запрос через определенный интерфейс?
Пишу на golang, но не в этом суть я думаю

  • Вопрос задан более трёх лет назад
  • 2431 просмотр

Комментировать
Решения вопроса 1
Админю сервера, починяю примуса.

Имею на сервере два адреса на одном интерфейсе, для отправки запроса curl’ом с нужного адреса использую
curl —interface N.N.N.N
Где N.N.N.N — IPшник с которого отправлять запрос.
А man нам говорит, что там же можно указывать и имя интерфейса, цитата из man

--interface Perform an operation using a specified interface. You can enter interface name, IP address or host name. An example could look like: curl --interface eth0

Ответ написан более трёх лет назад

Григорий Byrger: значит у других интерфейсов нет роутов во внешний мир, только и всего.
что вам говорит
ip a s и
ip r s

Inter Plotnik @Byrger Автор вопроса
Erelecano Oioraen: дело было в том что от рута к ним доступа нет.
Inter Plotnik @Byrger Автор вопроса
Erelecano Oioraen: наоборот, только от рута к ним доступ =(
Ответы на вопрос 2

ky0

Миллиардер, филантроп, патологический лгун

Вы же TCP/UDP-запросы имеете в виду? Тогда нужно просто соответствующим образом настроить роутинг, сетевой стек ОС сам разберётся, куда отправлять пакеты.

Ответ написан более трёх лет назад
Inter Plotnik @Byrger Автор вопроса

Мне нужно просто к сайту обращаться. Но проблема в том что сайт один, а ПО долго распределять запросы.
Допустим запрос 1 отправить в гугл с одной сетевой карты, а запрос 2 с другой сетевой карты

ky0

Григорий Byrger: можно заюзать bonding в режиме round-robin, тогда пакеты будут распределяться по всем интерфейсам.

Примеры использования cURL

cURL (расшифровывается как Client URL ) это инструмент, позволяющий взаимодействовать с различными серверами и поддерживающий множество протоколов: HTTP, FTP , TELNET и др. Изначально cURL — это служебная программа для командной строки. PHP поддерживает работу с библиотекой cURL.

Утилита cURL установлена по умолчанию во всех современных операционных системах Windows, Mac и Linux.

Guzzle PHP HTTP клиент, обертка над cURL.

Тестирование HTTP / HTTPS при помощи cURL или rest-client

cURL позволяет легко выполнять любые HTTP методы для нужного ресурса. Можно передавать любые параметры запросов и заголовков, а так же проверять ответные заголовки и данные. Инструмент командной строки «curl», стандартен для большинства *nix систем. Для пользователей Windows подойдёт MinGW/MSYS.

Пример использования и базовые опции:

# curl -X PUT www.example.com/bar/1 -d "some=var" -d "other=var2" -H "Accept: text/json" -I

-X [METHOD] определяет HTTP метод.
-d «name=value» устанавливает имя и значения переменных в POST/PUT.
-H [HEADER] устанавливает заголовок.
-I, –head отображать только заголовки ответа.

-k, –insecure Разрешить подключения к сайтам SSL без сертификатов. По умолчанию curl верифицирует все сертификаты и чтобы он не выдавал ошибку о неверных (самоподписанных) сертификатах и установил соединение используйте эту опцию.

-L, –location Следовать за перенаправлениями (редиректами)

–max-time (или -m) — это максимальное время в секундах, в течение которого вся операция должна быть завершена или отменена. Параметр –max-time может предотвратить зависание Curl при выполнении пакетных заданий в медленных сетях.

curl --max-time 4 https://wiki.dieg.info

Краткий справочник часто используемых команд curl для протоколов HTTP/HTTPS

Какие заголовки отдает сервер? Используйте опцию -I, она позволяют получить заголовок без тела документа. Проверим HTTP ответ сайта, используя ключ I:

# curl -I dieg.info HTTP/1.1 301 Moved Permanently Date: Sat, 23 Apr 2022 07:04:04 GMT Server: Apache Location: https://dieg.info/ Cache-Control: max-age=600 Expires: Sat, 23 Apr 2022 07:14:04 GMT Content-Type: text/html; charset=iso-8859-1

Рекурсивное отслеживание редиректов.

curl -I -L dieg.info

Замер скорости ответа сайта. Измерение продолжительности соединения FID (First Input Delay — Задержка первого ввода):

curl -w "%\n" -o /dev/null -s https://dieg.info 4.561

Проверить работу gzip сайта при помощи curl, если включено должны увидеть заголовок content-encoding: gzip

curl -H "Accept-Encoding: gzip" -I https://wow2.top . content-encoding: gzip

Если у вас несколько ip на сервере и вы хотите сделать запрос с конкретного вашего ip — используйте ключ interface:

curl --interface 193.233.203.51 ipinfo.io/ip

Использование cURL с IPv6

Ключ -6 означает использовать только IPv6, ключ -4 соответственно IPv4. Если libcurl может преобразовывать адрес в несколько версий IP (что происходит, если он поддерживает IPv6), эта опция указывает libcurl разрешать имена только в адреса IPv6.

Запрос к локалхост:

curl -6 "http://[::1]/"

Рекурсивный запрос http заголовков к сайту. Ключ v позволяет в расширенном режиме убедиться, что curl использует имееyно IPv6

curl -v -6 --max-time 7 -IL https://wow2.top * Trying 2001:678:6d4:9203::15:443. * Connected to wow2.top (2001:678:6d4:9203::15) port 443 (#0)

Авторизация POST на PHP с использованием curl

Пример авторизация Метод HTTP POST на PHP с использованием curl:

 function login($url,$login,$pass){ $ch = curl_init(); if(strtolower((substr($url,0,5))=='https')) { // если соединяемся с https curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); } curl_setopt($ch, CURLOPT_URL, $url); // откуда пришли на эту страницу curl_setopt($ch, CURLOPT_REFERER, $url); // cURL будет выводить подробные сообщения о всех производимых действиях curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,"login=".$login."&pass=".$pass); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4"); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //сохранять полученные COOKIE в файл curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); $result=curl_exec($ch); // Убеждаемся что произошло перенаправление после авторизации if(strpos($result,"Location: home.php")===false) die('Login incorrect'); curl_close($ch); return $result; } // чтение страницы после авторизации function Read($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // откуда пришли на эту страницу curl_setopt($ch, CURLOPT_REFERER, $url); //запрещаем делать запрос с помощью POST и соответственно разрешаем с помощью GET curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //отсылаем серверу COOKIE полученные от него при авторизации curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4"); $result = curl_exec($ch); curl_close($ch); return $result; } ?>

PHP: удаленный размер файла без загрузки файла

Функция вывод размер удаленного файла, используется библиотека PHP curl и HTTP метод запроса HEAD (параметр CURLOPT_NOBODY).

function getRemoteFilesize($url){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, TRUE); curl_setopt($ch, CURLOPT_NOBODY, TRUE); $data = curl_exec($ch); $size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); curl_close($ch); return $size; } $url = 'https://example.com/file.csv'; echo getRemoteFilesize($url); echo "\n";

10 команд curl, которые вам следует знать

Команда Mail.ru Cloud Solutions перевела статью, автор которой составил краткий справочник часто используемых команд curl для протоколов HTTP/HTTPS. Это не замена официального руководства по cURL, скорее, краткий конспект.

cURL (расшифровывается как Client URL) — программное обеспечение, которое предоставляет библиотеку libcurl и инструмент командной строки curl. Возможности cURL огромны, во многих опциях легко потеряться.

curl — инструмент для передачи данных с сервера или на него, при этом используется один из поддерживаемых протоколов: DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET и TFTP. Команда предназначена для работы без взаимодействия с пользователем.

Команда curl запускается из командной строки и предустановлена в большинстве дистрибутивов Linux.

Варианты применения:

  • доступ без браузера;
  • внутри shell-скриптов;
  • для тестирования API.

В основном я использовал curl для тестирования API, иногда просто вставляя команды, которые нашел в интернете. Но я хочу разобраться в curl и лучше понять его особенности. Так что поделюсь некоторыми командами, с которыми столкнулся во время работы.

Запрос страницы

Если никакие аргументы не указаны, то команда curl выполняет HTTP-запрос get и отображает статическое содержимое страницы. Оно аналогично тому, что мы видим при просмотре исходного кода в браузере.

curl www.google.com
Скачивание файла

Есть два варианта этой команды.

  • Скачать файл и сохранить под оригинальным именем (testfile.tar.gz).

curl -O https://testdomain.com/testfile.tar.gz

  • Скачать файл и сохранить под другим именем.

curl -o custom_file.tar.gz https://testdomain.com/testfile.tar.gz

Еще можно скачать несколько файлов одной командой, хотя в мануале так делать не рекомендуют.

curl -O https://testdomain.com/testfile.tar.gz -O https://testdomain.com/testfile2.tar.gz
Получение заголовков HTTP

Если вы хотите посмотреть, какие заголовки отдает сервер, то можно использовать опции -I или -head. Они позволяют получить заголовок без тела документа.

curl -I https://www.google.com HTTP/1.1 200 OK Content-Type: text/html; charset=ISO-8859-1 P3P: CP=»This is not a P3P policy! See g.co/p3phelp for more info.» Date: Thu, 04 Jun 2020 15:07:42 GMT Server: gws X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Transfer-Encoding: chunked Expires: Thu, 04 Jun 2020 15:07:42 GMT Cache-Control: private Set-Cookie: 1P_JAR=2020-06-04-15; expires=Sat, 04-Jul-2020 15:07:42 GMT; path=/; domain=.google.com; Secure Set-Cookie:

Игнорирование ошибки неправильных или самоподписанных сертификатов

Когда вы тестируете веб-приложение или API, то в вашем тестовом окружении могут быть самоподписанные или неправильные SSL-сертификаты. По умолчанию curl верифицирует все сертификаты. Чтобы он не выдавал ошибку о неверных сертификатах и устанавливал соединение для тестирования, используйте опцию -k или -insecure.

curl -k https://localhost/my_test_endpoint
Отправка POST-запроса

Иногда для тестирования API нужно отправить какие-либо данные, обычно это делают через POST-запрос. Если вы делаете POST-запрос при помощи curl, то можете отправить данные либо в виде списка имя=значение, либо в виде JSON.

  • Запрос в виде списка имя=значение.

curl —data «param1=test1&param2=test2» http://test.com

  • Запрос в виде JSON.

curl -H ‘Content-Type: application/json’ —data ‘<"param1":"test1","param2":"test2">‘ http://www.test.com

Параметр —data эквивалентен -d, оба указывают curl выполнить HTTP POST-запрос.

Указание типа запроса

Если curl не передаются никакие данные, то по умолчанию он выполняет HTTP GET запрос. Но если вам, например, нужно обновить данные, а не пересоздать их заново, то curl поддерживает опции, указывающие тип запроса. Параметры -x или —request позволяют указать тип HTTP-запроса, который используется для сообщения с сервером.

# updating the value of param2 to be test 3 on the record id curl -X ‘PUT’ -d ‘<"param1":"test1","param2":"test3">‘ \http://test.com/1
Использование авторизации

API защищено авторизацией по логину-паролю — вы можете передать пару логин-пароль, используя параметр -u или —user. Если просто передать логин, то curl запросит пароль в командной строке. Используете параметр несколько раз — для авторизации на сервер будет передано только последнее значение.

curl -u https://my-test-api.com/endpoint1
Управление резольвом имен

Вы хотите протестировать API перед развертыванием и перенаправить запрос на тестовую машину — это можно сделать, указав альтернативный резольв имени эндпоинта для данного запроса. Все работает эквивалентно пропиcыванию хоста в /etc/hosts.

curl —resolve www.test.com:80:localhost http://www.test.com/
Загрузка файла

О возможности загрузки файла через curl я узнал недавно. Не был уверен, что это возможно, но, по всей видимости, это так: curl с опцией -F эмулирует отправку заполненной формы, когда пользователь нажимает кнопку отправки. Опция указывает curl передавать данные в виде POST-запроса, используя multipart / form-data Content-Type.

curl -F @field_name=@path/to/local_file

Вы можете загрузить несколько файлов, повторяя параметр -F.

curl -F @field_name=@path/to/local_file @field_name=@path/to/local_file_2
Измерение продолжительности соединения

Вы можете использовать опцию -w для отображения информации в stdout после завершения передачи. Она поддерживает отображение набора переменных. Например, можно узнать общее время, которое потребовалось для успешного выполнения запроса. Это удобно, если вам нужно определить время загрузки или скачивания с помощью curl.

curl -w «%\n» -o /dev/null -s www.test.com

Это некоторые из опций, которые можно использовать с curl. Надеюсь, информация была вам полезна и статья понравилась.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *