在ruby中,如何从多行字符串中获取从行号n到最后一行的数据?

在ruby中,如何从多行字符串中获取从行号n到最后一行的数据?,ruby,string,Ruby,String,我正在ruby中执行以下curl请求: cmd="curl --silent --insecure -i -X GET -u \"local\username:password\" \"https://example.com/Console/Changes\"" response = `cmd` 它将产生以下输出: 从上面的输出来看,似乎响应变量包含一个多行字符串值。为了确认,我正在尝试在此处打印“response”变量的类型: put response.class 这里的输出是: 串 如何

我正在ruby中执行以下curl请求:

cmd="curl --silent --insecure -i -X GET -u \"local\username:password\" \"https://example.com/Console/Changes\""
response = `cmd`
它将产生以下输出:

从上面的输出来看,似乎响应变量包含一个多行字符串值。为了确认,我正在尝试在此处打印“response”变量的类型:

put response.class

这里的输出是:


如何从上述响应中分别提取头信息和json正文?

在Ruby中有更好的方法来执行HTTP请求,例如使用标准库的

话虽如此,我将回答你的问题

HTTP标准,标头和正文由一个空行分隔,其中只包含一个CRLF(
\r\n
)。标题的每一行也以CRLF结尾。因此,我们可以简单地在两个CRLF的第一次出现时分割响应,即在字符串
“\r\n\r\n”

由于此序列也可能出现在主体中,因此我们需要指定希望拆分最多包含2个元素

header,body=response.split(“\r\n\r\n”,2)
请注意,尽管这样,最后一行标题不会以
“\r\n”
结尾,但这应该不是问题。技术上更正确的版本是在
“\r\n”
处拆分,然后是
“\r\n”
。这样,我们在拆分时就不会剥离尾部的
“\r\n”
。这可以使用正则表达式通过查找隐藏来完成:


header,body=response.split(/(?在HTTP请求中使用gem或标准库可能要容易得多。请参阅-这是一个从CURL到ruby代码的转换器。也有许多用于此的gem,如和@ShanthaDodmane:如果使用反引号运行外部命令,结果将始终是
字符串类型
,并保留命令的标准输出。如果要访问此字符串的部分内容,必须对其进行解析。