请问如何优雅地从多行字符串内提取数据

起因

我打算写一个http代理的小脚本,在处理 http报文时产生了对能否更优雅地提取参数比较好奇

测试数据

在不考虑更多数据对情况下,我们取两行http报文头做测试数据,假设这些数据已经存入了名为test的字符串变量中

GET / HTTP1.1
HOST: www.baidu.com

目标、个人解决方法与

设这里我想提取HOST的值www.baidu.com
我的解决方法是:
fmt.Sscan(test[strings.Index(test,"\n"):],&space,&adr)
我打算先截取字符串取第二行往后数据,然后将HOST:这个字段传入打算废弃的变量space中,而将有效的www.baidu.com存入adr内

问题

除了这种方法,有没有更优雅地方法取出www.baidu.com这个数据。
比如不需要写这个废弃变量与更多行代码就可以精准取出。

麻烦各位了。

y1nhui
最佳答案

1、使用net/http库就好了,反向代理十几行代码就搞定了,关键就几行。 2、如果你要自己解析的话,使用\r\n作为切割符号切割就好,header name也是规范的。 3、解析http请求我这个有个自己写的 github.com/eudore/eudore/blob/mast... 里面还有一个支持长连接的深入版本。

参考:

www.flysnow.org/2016/12/24/golang-...

staight.github.io/2019/10/24/golan...

3年前 评论
1112 (作者) 3年前
yinhui (楼主) 3年前
yinhui (楼主) 3年前
yinhui (楼主) 3年前
yinhui (楼主) 3年前
讨论数量: 3

又思考了一下,发现了一个解法 fmt.Sscan(test[strings.Index(test,"\n")+strings.Index(test[strings.Index(test,"\n"):]," " ):],&adr) 提出第二行的开头序列后再加上一次截取后再提出第一个空格序列的值使开头指向第二行的第一个空格之后。 不知道各位有没有更好的解法呢

3年前 评论

1、使用net/http库就好了,反向代理十几行代码就搞定了,关键就几行。 2、如果你要自己解析的话,使用\r\n作为切割符号切割就好,header name也是规范的。 3、解析http请求我这个有个自己写的 github.com/eudore/eudore/blob/mast... 里面还有一个支持长连接的深入版本。

参考:

www.flysnow.org/2016/12/24/golang-...

staight.github.io/2019/10/24/golan...

3年前 评论
1112 (作者) 3年前
yinhui (楼主) 3年前
yinhui (楼主) 3年前
yinhui (楼主) 3年前
yinhui (楼主) 3年前

也可以试试正则

3年前 评论
yinhui (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!