Что такое Команда GET
в Ubuntu? Когда я пробовал использовать telnet, я случайно набрал GET /
слишком медленно, время истекло, и я случайно нажал Enter , и он выполнил команду GET
.
Результат был:
HTML>
<HEAD>
<TITLE>Directory /</TITLE>
<BASE HREF="file:/">
</HEAD>
<BODY>
<H1>Directory listing of /</H1>
<UL>
<LI><A HREF="./">./</A>
<LI><A HREF="../">../</A>
<LI><A HREF="bin/">bin/</A>
<LI><A HREF="boot/">boot/</A>
<LI><A HREF="cdrom/">cdrom/</A>
<LI><A HREF="dev/">dev/</A>
<LI><A HREF="etc/">etc/</A>
<LI><A HREF="home/">home/</A>
<LI><A HREF="lib/">lib/</A>
<LI><A HREF="lib32/">lib32/</A>
<LI><A HREF="lib64/">lib64/</A>
<LI><A HREF="libx32/">libx32/</A>
<LI><A HREF="lost%2Bfound/">lost+found/</A>
<LI><A HREF="media/">media/</A>
<LI><A HREF="mnt/">mnt/</A>
<LI><A HREF="opt/">opt/</A>
<LI><A HREF="proc/">proc/</A>
<LI><A HREF="root/">root/</A>
<LI><A HREF="run/">run/</A>
<LI><A HREF="sbin/">sbin/</A>
<LI><A HREF="snap/">snap/</A>
<LI><A HREF="srv/">srv/</A>
<LI><A HREF="swapfile">swapfile</A>
<LI><A HREF="sys/">sys/</A>
<LI><A HREF="tmp/">tmp/</A>
<LI><A HREF="usr/">usr/</A>
<LI><A HREF="var/">var/</A>
</UL>
</BODY>
</HTML>
Что это за команда?
Когда я запускаю GET / HTTP / 1.1
, отображается http://www.i5.com/calacom
в конце страницы ... Что это за веб-сайт?
человек GET
говорит:
LWP-REQUEST(1p) User Contributed Perl Documentation LWP-REQUEST(1p)
NAME
lwp-request - Simple command line user agent
Серьезно! Я не запускал команду внутри telnet!
, где GET
показывает GET: / usr / bin / GET /usr/share/man/man1/GET.1p.gz
.
Все команды GET
выполнялись на самом терминале! Не публикуйте в telnet ответы о HTTP. Я не новичок в HTTP.
Это тоже было для меня в новинку. Однако, проведя небольшое расследование, я пришел к следующему выводу:
$ whereis GET
GET: /usr/bin/GET /usr/share/man/man1/GET.1p.gz
Итак, это «команда» в / usr / bin
.
$ file /usr/bin/GET ; ll /usr/bin/GET
/usr/bin/GET: symbolic link to lwp-request
lrwxrwxrwx 1 root root 11 Jan 11 21:01 /usr/bin/GET -> lwp-request*
Это символическая ссылка для lwp-запроса
в том же каталоге.
$ ll /usr/bin/ | grep lwp-request
lrwxrwxrwx 1 root root 11 Jan 11 21:01 GET -> lwp-request*
lrwxrwxrwx 1 root root 11 Jan 11 21:01 HEAD -> lwp-request*
lrwxrwxrwx 1 root root 11 Jan 11 21:01 POST -> lwp-request*
-rwxr-xr-x 1 root root 16200 Jan 11 21:01 lwp-request*
Есть и другие «символические ссылки» на тот же исполняемый файл.
$ file /usr/bin/lwp-request ; dpkg -S /usr/bin/lwp-request
/usr/bin/lwp-request: Perl script text executable
libwww-perl: /usr/bin/lwp-request
Это сценарий Perl, входящий в пакет libwww-perl .
$ man GET
Дополнительная информация о команде покажет, что существует опция -u
:
-u Печать метода запроса и абсолютный URL-адрес по мере выполнения запросов.
Итак, если мы попробуем выполнить команду в вопросе с параметром -u
:
$ GET -u / HTTP/1.1
отобразится:
GET file:/
<HTML>
<HEAD>
<TITLE>Directory /</TITLE>
<BASE HREF="file:/">
</HEAD>
<BODY>
<H1>Directory listing of /</H1>
...
</BODY>
</HTML>
GET http://www.HTTP.com/1.1
<html><head><title>www.http.com</title></head><frameset BORDER='0' frameborder='0' framespacing='0' rows='100%,*'>
<frame name='target' src='http://www.i5.com/calacom'>
<noframes> <body BGCOLOR='#FFFFFF'>
This page requires that your browser supports frames.
<BR>You can access the page without frames with this <a href='http://www.i5.com/calacom'>link</A>.
</body></noframes></frameset></html>
Мы увидим, что когда команде GET
дается два аргументов, он пытается получить доступ к двум URL-адресам:
Первый - это список локального каталога /
. Вторая - (вероятно, несуществующая) «страница» 1.1
веб-сайта http.com
, которая содержит «фрейм» для отображения страницы http: / /www.i5.com/calacom
.
Это действительно метод HTTP GET
, но не специфичный/связанный с telnet. GET
просто посылает GET
запрос и отображает вывод в STDOUT
. Когда вы выполняете GET /
, вы фактически отправляете GET
запрос к вашей корневой папке. Чтобы проверить это, откройте любой браузер и просто введите /
в строке URL. Теперь просмотрите элементы и вы заметите, что HTML страницы совпадает с тем, что вы получили в терминале.
Я разработал простой REST API для тестирования. Вот как выглядят результаты:
$ GET localhost:8090
{
"bookID": 2091,
"title": "Dear Genius",
"authors": "Ursula Nordstrom-Leonard S. Marcus-Maurice Sendak",
"average_rating": 4.39,
"isbn": 64462358,
"language_code": "eng",
"ratings_count": 518,
"price": 2107
}
Вы можете найти руководство по lwp-request(1): Простой пользовательский агент - Linux man page. Цитирую оттуда:
Эта программа может быть использована для отправки запросов к WWW-серверам и вашей локальной файловой системе. Содержимое запроса для методов POST и PUT считывается из stdin. Содержимое ответа выводится на stdout. Сообщения об ошибках выводятся на stderr. Программа возвращает значение статуса, указывающее на количество URL, которые не сработали.