在请求前脚本中向Postman中的每个请求添加标头

时间:2018-07-02 08:12:06

标签: postman

我想使用以下请求前脚本向整个集合中的每个请求自动添加标头:

pm.request.headers.add({
    'key': "myvar",
    'value': pm.environment.get("myvar")    
});

myvar 是环境变量。

不幸的是,它不起作用。我错过了什么吗?

7 个答案:

答案 0 :(得分:13)

对于在postman〜7.10.0上尝试过的人,您可以在请求前脚本中以编程方式将标头添加到请求或集合中(到collection中会将标头添加到collection内部的所有请求中)。

pm.request.headers.add({ 
    // These keys appears when you set a header by hand. Just for fun they are here
    disabled: false,
    description:{
        content: "DescriptionTest",
        type: "text/plain"
    },
    // Your header, effectively
    key: 'KeyTest', 
    name: 'NameTest', 
    // If you set a variable you can access it
    // HeaderTest here has value="ValueHeaderTest"
    value: pm.collectionVariables.get("HeaderTest")
});

代码段生成器将不会显示添加的标题:

GET /get_info.php HTTP/1.1
Host: 192.168.15.25:8001
Content-type: application/json
User-Agent: PostmanRuntime/7.19.0
Accept: */*
Host: 192.168.15.25:8001
Accept-Encoding: gzip, deflate
Connection: keep-alive

但是邮递员控制台将:

GET /get_info.php HTTP/1.1
Content-type: application/json
KeyTest: ValueHeaderTest
User-Agent: PostmanRuntime/7.19.0
Accept: */*
Host: 192.168.15.25:8001
Accept-Encoding: gzip, deflate
Connection: keep-alive

答案 1 :(得分:8)

看起来pm.request.headers.add()当前未更新正在发送的请求。它被标记为功能请求:https://github.com/postmanlabs/postman-app-support/issues/4631

您可能已经知道可以创建预置头(从Presets下拉列表中),以使设置头变得更加容易。在“设置”下有几个选项可以包含特定的标题。但是这些建议不会像您所询问的那样自动将标头添加到整个集合中的每个请求中。

更新:Postman在Postman App(v7.0.9)中添加了对此的支持。

答案 2 :(得分:3)

这当然有效。松开键和值上的反逗号

pm.request.headers.add({
    key: "myvar",
    value: pm.environment.get("myvar")    
});

答案 3 :(得分:0)

这是从这里复制的,但是对我有用

https://gist.github.com/madebysid/b57985b0649d3407a7aa9de1bd327990

pm.sendRequest({
    url: "https://mydomain/ers/config/endpoint",
    method: 'GET',
    header: {
        'content-type': 'application/json',
        'accept': 'application/json',
        //'x-site-code': pm.environment.get("x-site-code")
        'X-CSRF-TOKEN': 'fetch'
    },
    body: {
        mode: 'raw'//,
        raw: JSON.stringify({ email: pm.environment.get("email"), password: pm.environment.get("password") })
    }
}, function (err, res) {

    pm.environment.set("X-CSRF-TOKEN", "Bearer " + res.json().token);
});

答案 4 :(得分:0)

在登录的测试部分,使用此脚本记住环境中的令牌

        <TextBlock.Resources>
            <system:String x:Key="MyString">This person is</system:String>
        </TextBlock.Resources>
        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0} {1}; {2}, {3}">
                <Binding Source="{StaticResource MyString}" />
                <Binding Path="PersonID"/>
                <Binding Path="LastName"/>
                <Binding Path="FirstName"/>
            </MultiBinding>
        </TextBlock.Text>

在每次需要令牌的呼叫中,请在标头部分使用这样的令牌

var jsonData = JSON.parse(responseBody);

tests["Body contains result"] = responseBody.has("result");

var result = jsonData.result

tests["result contains user"] = result.user !== null
var user = result.user
tests["result contains token"] = result.token !== null
var token = result.token
var accessToken = token.accessToken
var refreshToken = token.refreshToken

postman.setEnvironmentVariable("accessToken", accessToken);
postman.setEnvironmentVariable("refreshToken", refreshToken);

答案 5 :(得分:0)

我想也许你可以这样尝试:

  // Add or update an existing header

 pm.request.headers.upsert({
 'key': "myvar",
 'value': pm.environment.get("myvar") 
 });

这已在Postman App(v7.0.9)中更新。有关更多参考,请参考: https://github.com/postmanlabs/postman-app-support/issues/1947

答案 6 :(得分:0)

Postman v7.0.9开始,现在可以通过在集合上添加预请求脚本来实现。

要执行此操作,请转到您的收藏集,右键单击它,选择“编辑”,然后转到Pre-request Scripts标签,您可以在其中添加代码段,即:

pm.request.headers.add({
  key: 'X-HEADER-TEST',
  value: '1'
});