VS Code REST Client扩展:如何提取嵌套响应头中的CSRF Token?
当然可以提取,给你两种可靠的方法:
方法1:正则表达式提取(推荐)
REST Client支持用regexp过滤器匹配提取,这种方法不管返回的Set-Cookie是单个字符串还是多个Cookie的数组,都能准确捕获csrftoken的值:
@csrf_token = {{getToken.response.headers.Set-Cookie | regexp "^csrftoken=([^;]+)"}}
原理:正则^csrftoken=([^;]+)会匹配以csrftoken=开头的内容,捕获组([^;]+)会提取到第一个分号前的所有字符,也就是你要的csrftoken值。
方法2:字符串拆分法
如果确定返回的Set-Cookie是单个Cookie(字符串形式),可以用split方法拆分:
@token_response = {{getToken.response.headers.Set-Cookie}} @csrf_token = {{token_response.split(';')[0].split('=')[1]}}
如果Set-Cookie是多个Cookie组成的数组,需要先取第一个元素再拆分:
@token_response = {{getToken.response.headers.Set-Cookie}} @csrf_token = {{token_response.[0].split(';')[0].split('=')[1]}}
你之前写法的问题
- 错误用
.0访问数组元素:REST Client中数组索引的正确写法是.[index],比如.[0],而不是.0; //[0]不是REST Client支持的变量操作语法,所以会失效。
修改后的完整代码
# Get CSRF Token # @name getToken GET http://{{host}}/api/csrf_token # 推荐使用正则提取 @csrf_token = {{getToken.response.headers.Set-Cookie | regexp "^csrftoken=([^;]+)"}} # 也可以根据情况选择拆分法(取消注释即可使用) # @token_response = {{getToken.response.headers.Set-Cookie}} # @csrf_token = {{token_response.split(';')[0].split('=')[1]}} ###### # Edit existing xyz PATCH http://{{host}}/api/xyz/1 content-type: application/json x-csrftoken: {{csrf_token}} origin: http://{{host}} { "name": "some name" }
内容的提问来源于stack exchange,提问作者Mr_Robot
相关产品推荐
相关产品推荐

