2017-09-28 43 views
0

我目前正在爲我的Ruby應用程序開發一些POST請求,並收到與wrong status line有關的錯誤。綜觀文檔,如果下面的正則表達式匹配的異常將會被拋出:Ruby HTTP的read_status_line是做什麼的?

def read_status_line(sock) 
    str = sock.readline 
    m = /\AHTTP(?:\/(\d+\.\d+))?\s+(\d\d\d)(?:\s+(.*))?\z/in.match(str) or 
    raise Net::HTTPBadResponse, "wrong status line: #{str.dump}" 
    m.captures 
end 

source

我很好奇的正則表達式實際上是試圖匹配?

/\AHTTP(?:\/(\d+\.\d+))?\s+(\d\d\d)(?:\s+(.*))?\z/in.match(str) 

回答

0

section 6 of RFC2616直的HTTP響應頭:

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF 

換句話說,是這樣的:

HTTP/1.1 200 OK 

或許:

HTTP/1.1 302 Moved Temporarily 
+0

喔!我正在檢查'sock.readline',並且得到以下結果'「HTTP/1.1 1 CUSTOM」',它與該正則表達式不匹配。 – theGreenCabbage

+0

按照規範,狀態代​​碼應該以正則表達式中的NNN或'\ d \ d \ d'表示。 '1'無效。你正在處理一個不好的HTTP實現。如果你真的被卡住了,需要這些代碼來處理那個可怕的破壞的服務器,也許可以用一個測試與'\ d +'相反的方法來修補這個方法。醜陋,但有時是必要的。 – tadman

+0

好的,謝謝。現在我必須弄清楚爲什麼我得到'HTTP/1.1 1 CUSTOM'。你有什麼想法嗎? – theGreenCabbage