Как отправить HTTP-запросы через TCPSocket? - PullRequest
1 голос
/ 03 мая 2011

Я написал класс в Ruby, который действует как клиент HTTP. Код минимален, но причина, по которой я не использую 'net/http', заключается в том, что этот метод позволяет мне лучше контролировать запросы и документация по HTTP вообще не помогает.

В любом случае, проблема в том, что сокет будет работать только для одного запроса и ответа. Отправка второго или последующего запроса дает мне пустой ответ.

Например:

  1. Открыть соединение с Google
  2. GET "/"
  3. Ответ - это google.ca html
  4. GET "/"
  5. Ответ пуст

Я пытался закрыть и открыть соединение между запросами, но это только замедлило его и не устранило проблему. Я все еще получил пустые ответы.

Так в чем здесь проблема?

Есть ли способ, позволяющий мне проверить, есть ли у объекта TCPSocket открытое соединение, чтобы я случайно не открывал новое?

1 Ответ

4 голосов
/ 28 декабря 2011

Попробуйте:

require "socket"
host = "google.com"
port = 80
socket = TCPSocket.new host,port
request = "GET / HTTP/1.0\r\nHost:#{host}\r\n\r\n"
socket.print request
response = socket.read

Это вернет главную страницу Google.Если вы хотите отправить запрос после запроса, измените его на «HTTP / 1.1» и прочитайте ответ, а затем отправьте следующий запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...