Вопрос №109 от пользователя user-5ee8b64c700a38b8 в уроке «Основы HTTP», курс «Протокол HTTP»

Протокол HTTP
Основы HTTP (архив)

user-5ee8b64c700a38b8

2 Task.

telnet localhost[enter]
POST /login HTTP/1.1[enter]
HOST:hexlettesthost.com[enter]
Content-Length:28[enter]
Content-Type:application/x-www-form-urlencoded[enter]

....и тишина.....Пробовал к другим сайтам подключаться по этому типу - они после Content-Type:application/x-www-form-urlencoded высылают форму в ответ на которую и надо делать user=user&password=pass.

Тут же отклика с сервера не приходит,пока не нажмешь нужное число раз Enter(тогда выкинет ошибку) или если отправить login=user&password=12345678 - получим

  <HEAD><TITLE>Bad Request</TITLE></HEAD>                                                      
  <BODY>                                                                                       
    <H1>Bad Request</H1>                                                                       
    bad header 'login=user&amp;password=12345678\r\n'.                                         
    <HR>                                                                                       
    <ADDRESS>                                                                                  
     WEBrick/1.3.1 (Ruby/2.1.5/2014-11-13) at                                                  
     946df2cb4947:80                                                                           
    </ADDRESS>                                                                                 
  </BODY>                                                                                      
</HTML> 

Видно что жалуется на хедер,но какаой тут хедер если я уже должен отправлять данные а не заголовки...

15 0

Rakhim D.

  1. Вы забыли про закрытие соединения (Connection: close).
  2. То, что другие серверы высылают в ответ форму, скорее всего является неправильной реализацией REST с их стороны.
0

Kirill Mokevnin

"....и тишина...." Вы же сказали серверу размер body (заголовок content-lenght), а сами его не передали. Вот он и ждет).

0

user-5ee8b64c700a38b8

Ждёт,али нет- спорный вопрос) Давайте по порядку:

root@946df2cb4947:/usr/src/app# telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is ']'.
POST /login HTTP/1.1
HOST:hexlettesthost.com
Content-length:28
Content-Type:application/x-www-form-urlencoded
Connection:сlose
login=user&password=12345678
...и?Тишина...Когда закрывать соединение то?После формирования адреса и типа запроса?Смысла нет - сервер от нас отбрыкивается сразу. После указания размера сообщения и типа передаваемых данных?Тоже не работает...может я что то делаю не так?))Ну не хочет он принимать у меня логин и пасс.

0

user-5ee8b64c700a38b8

сlose,поменял.Не срабатывает =)

0

Kirill Mokevnin

Вот смотрите, строка где фигурирует login pass это body, но как об этом узнает сервер? А вдруг там снова заголовок? Этот момент описан в протоколе http. Body отделяется от заголовков специальным образом. Вы же просто делаете перевод строки и не важно что выше идет content-lenght, порядок заголовков вообще не имеет значения, кроме перовой строки. Весь http запрос всегда делится на headers и body, у вас передается только headers (хотя там присутствует строка которую вы считаете за body).

4

user-5ee8b64c700a38b8

Сдал.Спасибо за комментарии,всё решалось проще чем кажется на первый взгляд.

2

Константин Корепин

Поясните, пожалуйста: сделал также: "POST /login HTTP/1.1 HOST:hexlettesthost.com Content-length:28 Content-Type:application/x-www-form-urlencoded Connection:сlose login=user&password=12345678"

"Весь http запрос всегда делится на headers и body, у вас передается только headers (хотя там присутствует строка которую вы считаете за body)." - вот здесь хотелось бы прояснить, как же в запросе все-таки указать, что строчка login=user&password=12345678 - это и есть body? Что-то не разобрался.

0

Kirill Mokevnin

В протоколе http body отделяется от заголовков дополнительным переводом строки или, как говорят, пустой строкой.

0

Константин Корепин

Когда я делаю перевод строчки после Connection: close мне сразу приходит такой ответ: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD><TITLE>Not Found</TITLE></HEAD>
<BODY>
<H1>Not Found</H1>
`/login' not found.
<HR>
<ADDRESS>
WEBrick/1.3.1 (Ruby/2.1.5/2014-11-13) at
hexlettestform.com:80
</ADDRESS>
</BODY>
</HTML>

и передать тело запроса login=user&password=12345678 уже не получается. Что я не так делаю?

0

Александр-C Вагин

Константин, скопируйте сюда ваш запрос, начиная со строчки telnet ...

0

Александр-C Вагин

А откуда вы взяли хост hexlettestform.com ? В задании другой

0

Константин Корепин

Александр, все получилось! Спасибо, что указали на ошибку. В 3 утра выполнял задание, действительно просто перепутал хост. Все получилось! Кирилл, также большое спасибо!

1

Александр-C Вагин

Рад, что получилось :)

0

Aram Saakyan

Всё же решил посмотреть комментарии и тем не менее путь к решению проблемы со вторым заданием яснее не стал. Пишу: ``` telnet localhost 8080

POST /login HTTP/1.1 HOST:hexlettesthost.com Content-length:28 Content-Type:application/x-www-form-urlencoded Connection:сlose

После конекшн клос нажимаю два ентера, сразу выдает ответ, без возможности передать логин и пароль. Два ентера перед конекшн клос тоже отправляет текст серверу. Пробовал \r\n результат не поменялся зависает в ожидании второго ентера.
0

Александр-C Вагин

  • Два ентера перед конекшн клос тоже отправляет текст серверу

А какую реакцию вы ожидали на это? :)

Какой ответ вам приходит в ответ?

0

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 1 июня
профессия
от 5 025 ₽ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 1 июня
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 1 июня
профессия
от 6 300 ₽ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 1 июня
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 1 июня
профессия
от 6 183 ₽ в месяц
Ручное тестирование веб-приложений
4 месяца
с нуля
Старт 1 июня
профессия
от 6 300 ₽ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 1 июня
профессия
от 10 080 ₽ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 1 июня
профессия
от 5 840 ₽ в месяц
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 1 июня
профессия
Верстка с использованием последних стандартов CSS
5 месяцев
с нуля
Старт в любое время
профессия
от 6 300 ₽ в месяц
новый
Автоматизированное тестирование веб-приложений на JavaScript
10 месяцев
с нуля
в разработке
дата определяется