簡體   English   中英

Ruby中的簡單HTTP服務器

[英]Simple HTTP server in Ruby

我正在構建一個簡單的HTTP服務器,並且在處理POST請求時遇到一些問題。 這是創建它的方法:

def make_post_request
    puts "Enter the name: "
    name = gets.chomp
    puts "Enter the email: "
    email = gets.chomp

    data = { person: { name: name, email: email } }
    puts data.to_json

    request = "POST /thanks.html HTTP/1.0\nContent-Length: #{data.to_s.length}\r\n\r\n#{data.to_json}"

    return request
end

這是服務器代碼(不完整):

    request = ""

    while line = client.gets
        request << line.chomp
    end

問題是服務器沒有收到“ \\ r \\ n \\ r \\ n”后面的部分,我的代碼有什么問題?

從代碼中還不清楚您正在做什么,但是我懷疑您的問題是您依賴gets ,它將嘗試從IO對象返回整行。 這意味着它將繼續阻止等待套接字中的換行符(或將其關閉)。

由於您的數據不是以換行符結尾,並且客戶端可能正在等待響應(因此不會關閉連接),因此服務器正在等待永遠不會出現的換行符。

您可以在請求的末尾添加一個\\n ,這可能會使您的代碼在這里工作,但是通常來說,使用主體解析HTTP消息比這要復雜一些。 基本方法是解析標頭並提取內容長度,然后您可以從正文中讀取很多字節,並且您將知道已到達消息末尾。 當然,如果您開始考慮分塊傳輸編碼之類的話,這將變得更加復雜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM