我有一个邮递员集合,其中包含多个文件夹,包含大约100个请求,包括GET,POST,DELETE,PUT等所有方法。
我需要在python中解析postman.json集合文件并创建请求并写入txt文件。 这些请求需要传递给另一个工具。你能帮帮我吗?任何指针都会有所帮助。 我很难解析集合JSON文件,这非常困难。
答案 0 :(得分:1)
下面的代码将帮助您了解如何解析Collection JSON文件,以便您可以递归地累积该集合中的所有请求。我使用了Postman Collection SDK以及一个名为Lodash的辅助工具。
您可以使用下面的代码段来获取您希望使用Python请求消费的请求信息。或者为了简单起见,只要你可以使用Javascript。
var fs = require('fs'), // needed to read JSON file from disk
sdk = require('postman-collection'),
Collection = sdk.Collection,
Request = sdk.Request,
Item = sdk.Item,
ItemGroup = sdk.ItemGroup,
_ = require('lodash'),
myCollection,
requests = [],
dfs = function (item, requests) { // fn -> Depth first search
// Check if this is a request
if (Item.isItem(item)) {
if (item.request && Request.isRequest(item.request)) {
requests.push(item.request);
}
}
// Check if this is a nested folder
else if (ItemGroup.isItemGroup(item)) {
// Check if this is an empty folder
if (item.items && (item.items.count() === 0)) {
return requests;
}
// Do a depth first search for requests on the nested folder
item.each(function (item) {
requests.push(dfs(item, []));
})
}
return requests;
};
// Load a collection to memory from a JSON file on disk
myCollection = new Collection(JSON.parse(
fs.readFileSync('<path_to_your_collection_json_file>').toString()));
myCollection.items.each(function (item) {
// Check if this is a request at the top level
if (Item.isItem(item)) {
if (item.request && Request.isRequest(item.request)) {
requests.push(item.request);
}
}
// Check if this is a folder at the top level
else if (ItemGroup.isItemGroup(item)) {
item.items.each(function (item) {
requests.push(dfs(item, []));
})
}
});
// Flatten. After flattening requests will an array of PostmanRequest objects
requests = _.flattenDeep(requests)
// Serialize each PostmanRequest to it's JSON representation
requests = _.map(requests, (r) => { return r.toJSON(); })
_.each(requests, (request) => {
console.log(request.url); // The request URL
console.log(request.method); // The HTTP Verb of your request Eg. GET, POST
_.each(request.header, (header) => {
console.log(header.key, header.value); // Eg. key -> 'Content-Type', value -> 'application/json'
});
// You can also access the request body and the auth, certificate and proxy used by the request
// Your PostmanRequest description is also available
});
答案 1 :(得分:0)
解析JSON字符串 json_str :
import json
obj = json.loads(json_str)
解析JSON文件:
import json
import io
with io.open("path/to/file.json", mode-"rb") as fd:
obj = json.load(fd)
阅读有关Requests
的文档有一个requests.request()
函数,您可以在参数中传递方法(GET / OPTIONS / POST / PUT / PATCH / DELETE / HEAD)。用法:
import requests
response = requests.request('GET', 'http://httpbin.org/get')
您可以将请求的结果写入二进制文件。您也可以使用文本文件,但某些响应可能是二进制的,例如,如果您下载图像。
with io.open("path/to/file.dat", mode="wb") as fd:
fd.write(response.content)