Yandex-tank 将 cookie 和 Host 标头添加到来自访问日志的请求中
Posted
技术标签:
【中文标题】Yandex-tank 将 cookie 和 Host 标头添加到来自访问日志的请求中【英文标题】:Yandex-tank add cookie and Host headers to requests from access log 【发布时间】:2015-12-02 08:38:31 【问题描述】:我有一个带有 cookie 的 access.log nginx:
99.20.231.22 www.carite.com - [01/Dec/2015:03:00:10 -0600] "GET /?mode=_ajax&_imod[]=i159330&make=Mercedes-Benz&_=1448960297171 HTTP/1.1" 200 1182 "http://www.carite.com/" "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (Khtml, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1" "phpSESSID=ebg5n89m9pc1iamekii1qra5k0; chooseStoreNotificationShown=1; dfa_visit=1448960180633603603; dfa_visitor=1448960180633796491; mod-compare-box=%7B%22vehicles%22%3A%7B%22v11279294%22%3A%7B%22vuid%22%3A%2211279294%22%2C%22isCompared%22%3Afalse%7D%7D%2C%22compareAll%22%3Atrue%2C%22cookieLifeTime%22%3A30%2C%22cookiePath%22%3A%22%5C%2F%22%7D; _ga=GA1.2.10339867.1448960182; _gali=make; _gat_a1=1; _gat_a2=1; _gat_a3=1; _gat_a4=1; usy46gabsosd=collserve__-2_1448960382693_8786" 80 0.295
我可以指定 Yandex-tank 从访问日志中获取 cookie 并将其添加到每个 yandex-tank 请求中吗?
我还需要从访问日志中获取标题“主机:”,而不是在load.ini
中指定它,例如:
headers = [Host: www.carite.com]
【问题讨论】:
【参考方案1】:你有两个选择:
让步进器从 access.log 中读取 cookie 和 uri(它 应该在那里完成 https://github.com/yandex/yandex-tank/blob/master/yandextank/stepper/missile.py#L213)
从 access.log 创建一个单独的文件,格式为https://yandextank.readthedocs.org/en/latest/tutorial.html#uri-style-uris-in-file。标题在旅途中被覆盖,因此您可以在任何地方重新定义标题
例如它可能是这样的:
[主办方:www.carite.com] [Cookie:PHPSESSID=ebg5n89m9pc1iamekii1qra5k0;选择StoreNotificationShown=1; dfa_visit=1448960180633603603; dfa_visitor=1448960180633796491; ...] /?mode=_ajax&imod[]=i159330&make=梅赛德斯-奔驰&=1448960297171 ... [主机:example.com] [Cookie:myowncookie=1] /某事 ...
我建议使用第二种方式作为最简单的方式
【讨论】:
第二种方法是最简单的,如果我只有一个主机的访问日志请求。但是我有不同的主机,并且需要请求中的标头“主机”相应地更改访问日志中的记录。以某种方式从 access.log 中识别出字段请求。是否也可以识别另一个字段(标题“主机”)? 标题被即时覆盖,即 [Host: www.carite.com] 将用于请求 /?mode=_ajax&imod[]=i159330&make=Mercedes-Benz&=1448960297171,如果你写进一步 [Host: example.com],它将应用于接下来将要读取的所有 uri。 我想修改github.com/yandex/yandex-tank/blob/master/yandextank/stepper/…,但我不太清楚标头是如何传递给它的。标题是字典还是海量?哪种格式? github.com/yandex/yandex-tank/blob/master/yandextank/stepper/… - 这是标题示例,设置很简单。 我尝试在headers=['Host: www.carite.com']
上替换 https://github.com/yandex/yandex-tank/blob/master/yandextank/stepper/missile.py#L221
但在 access.log 中看不到主机名。如果我在 load.ini 中设置 [Host: www.carite.com]
就可以了。以上是关于Yandex-tank 将 cookie 和 Host 标头添加到来自访问日志的请求中的主要内容,如果未能解决你的问题,请参考以下文章
命令错误:docker run direvius/yandex-tank