Intereting Posts

Разница между «ping» и «wget» в отношении разрешения имени хоста

Когда я использовал wget , разрешение имени хоста в порядке

 root:here cd$ wget https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123&app_id=x2&app_code=x1 

В результате

 Resolving gfe.cit.api.here.com... 52.51.134.116, 54.154.19.134, 52.208.9.155 Connecting to gfe.cit.api.here.com|52.51.134.116|:443... connected. HTTP request sent, awaiting response... 400 Bad Request 2016-12-24 13:18:47 ERROR 400: Bad Request. 

Но когда я использовал ping

 ping https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123&app_id=x2&app_code=x1 

В результате

 cannot resolve https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123: Unknown host 

Ошибка имени хоста, в чем разница между wget и ping ?

Отвечая на:

В чем разница между «ping» и «wget» в отношении разрешения имени хоста

Ping ожидает либо IP-адрес, либо имя хоста в качестве параметра. Вы даете ему полный URL-адрес, который он пытается разрешить как имя хоста и терпит неудачу. Со всем, кроме полностью отнесенного к ping команда ping может проверить соединение (и не удается выполнить мой следующий тест, возможно, потому, что запрос ICMP заблокирован или потому, что сервер не работает):

 $ ping gfe.cit.api.here.com Pinging cle2-cit.eu-west-1.elasticbeanstalk.com [54.154.19.134] with 32 bytes of data: Request timed out. 

Для общей разницы между ping и wget см. Ответ Алека.

По какой-либо причине, объясняющей ошибку 400, см. Раздел roaima.

Wget в основном используется для загрузки через HTTP, HTTPS и FTP, поэтому по умолчанию будет использоваться TCP для соединений. Ping использует протокол ICMP , который в основном говорит «привет» хосту и видит, отвечает ли он. ICMP не использует порт, что означает http: //. Он сообщает «компьютер» открыть соединение на порту 80 »и для порта HTTPS 443. Поскольку ICMP не использует порты, ping ожидает только и IP-адрес, но wget установил TCP-соединение и загрузил файл.

Чтобы ответить на интересующий вас вопрос. wget принимает URL-адрес, но ping занимает имя хоста. Ваш URL-адрес состоит из протокола ( https ), имени хоста ( gfe.cit.api.here.com ), пути ( /1/layer_put.json ) и трех закодированных параметров ( layer_id=123&app_id=x2&app_code=x1 ). В URL могут появляться другие элементы, такие как аутентификация и порт.

Для команды ping приемлемо только компонент имени хоста.

Затем команда wget открывает TCP / IP-соединение с ожидаемым протоколом ( 443/tcp в случае https ) и использует протокол HTTP для извлечения содержимого с указанного URL-адреса.

Команда ping использует ICMP для отправки запроса ping указанному хосту, который затем возвращает ответ ответа эха . Это ICMP-пакеты типа 8 и 0 соответственно.


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

Используйте одиночные кавычки вокруг вашего URL-адреса, и это, вероятно, будет работать так, как вы планировали.

Итак, у нас есть

 wget -O layer_put.json 'https://gfe.cit.api.here.com/1/layer_put.json?layer_id=123&app_id=x2&app_code=x1' ping -c3 gfe.cit.api.here.com