URL 编码邮递员变量? ?

我使用 Postman 进行 REST API 测试,并使用全局变量参数化测试。

我应该在 GET 请求中输入一个电话号码: /path/get?phone={{phone}},但是电话号码中前面的 +符号被解释为一个空格。

在 Postman 中 URL 编码全局变量的语法是什么?是否可以在 URL 中对变量运行 JSencodeURIComponent()

92097 次浏览

Use the Pre-request scripts (it's next to body) for this:

var encoded = encodeURIComponent(\{\{phone number}});

or

var encoded = encodeURIComponent(pm.environment.get("phone number"));

and to proceed, use:

pm.environment.set("encoded phone number", encoded);

And set your URL to /path/get?phone=\{\{encoded phone number}}

The trick is to get your environment variable in the pre-request script and then set it after encoding it

    var encoded = encodeURIComponent(pm.environment.get("phone"));
pm.environment.set("encoded phone number", encoded);

Click the Params button to open the data editor for URL parameters. When you add key-value pairs, Postman combines everything in the query string above. If your URL already has parameters - for example, if you are pasting a URL from some other source. Postman splits the URL into pairs automatically. https://www.getpostman.com/docs/v6/postman/sending_api_requests/requests

I am late but still worth it:

Just highlight and right click the part of url you want to encode. Select encodeURIComponent

That's it.

enter image description here

I came across this question looking for an answer to a similar question. For me, the variable was a JSON object. The endpoint I needed to hit was expecting an object list as a query parameter and I have no way to change that to be the request body.

As much as some of the answers helped, I ended up coming up with a combined solution. Also, some of the code given in other answers is outdated as Postman has updated their API over the years, so this uses methods that work on 7.22.1.

pm.environment.set("basicJSON", '[{"key1":"value1","key2":"value2"},{"key1":"value1","key2":"value2"}]')
var encoded = encodedURIComponent(pm.environment.get("basicJSON"))
pm.environment.set("encodedJSON", encoded)

This solution requires that both basicJSON and encodedJSON exist as environment variables. But what was important for me was the ease of editing the object. I didn't want to have to decode/encode constantly to change values, and I didn't want to have to open the environment variables dialogue. Also, it's important to note the single-quotes around the object. Excluding them or using double-quotes would cause Postman to send something like "[object Object]" which is useless to an endpoint expecting actual JSON.

Just a shortcut to Mohhamad Hasham' answer.

You can encode and decode direct in the Params Value field: enter image description here

I had similar problem with braces { and } in query parameter.
By turning off the following setting it started working for me.

enter image description here

This will work as well:

var encoded = encodeURIComponent(pm.request.url.query.get("phone"));
pm.request.url.query.remove("phone");
pm.request.url.query.insert("phone", encoded);

POSTMAN's documentation on building requests in the section "sending parameters" is helpful here. You can encode path data by simply encoding the URL with a colon, listing the key name of the encoded element, and then a new section will appear below the query parameters allowing you to customize values and add a description, just as we do with query params. Here's an example of encoding the URL for a GET request:

https://somesite-api-endpoint/:record/get

And here's what the display looks like after you add path data. Any value you add in the path variables section will automagically update the URL with your data. enter image description here

For the postman version 9.28.4 ==>

You can use 2 methods:

  1. By selecting the part of the url in url bar -> right click -> EncodeURLComponent. (screenshot attached)

Demonstration method#1

  1. You can also use "pre-request script" tab of postman and write the script for the variable manually. (screenshot attached)

Demonstration method#2