2017-09-28 24 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