Получение содержимого из HTML-формы POST с использованием TCPSocket
Повторно используя метод gets для объекта TCPSocket, я получаю следующий вывод
POST /targetPage.html HTTP/1.1
Host: 127.0.0.1:7125
...
...
...
Keep-Alive: 115
DNT: 1
Connection: keep-alive
Referer: http://127.0.0.1:7125/
Content-Type: application/x-www-form-urlencoded
Content-Length: 45
Если я снова использую.gets, все зависает, как мне получить этот "контент" длиной 45? Могу ли я получить это из моего объекта TCPSocket или мне нужно использовать что-то еще?
2 ответа
Решение
gets
читает строку, поэтому он будет блокироваться до истечения времени ожидания соединения или до чтения символа новой строки. Вы должны использовать read
метод, который читает определенное количество байтов (что очень удобно в заголовке Content-Length).
Включить заголовок:
Подключение: закрыть
в шапку. Это предотвратит зависание перед тем, как фактически прочитать тело запроса.