用python解析邮递员集合来创建请求

时间:2017-10-09 08:59:15

标签: python json python-requests postman

我有一个邮递员集合,其中包含多个文件夹,包含大约100个请求,包括GET,POST,DELETE,PUT等所有方法。

我需要在python中解析postman.json集合文件并创建请求并写入txt文件。 这些请求需要传递给另一个工具。你能帮帮我吗?任何指针都会有所帮助。 我很难解析集合JSON文件,这非常困难。

2 个答案:

答案 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 encoder/decoder

的文档

解析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')

写入binary file

您可以将请求的结果写入二进制文件。您也可以使用文本文件,但某些响应可能是二进制的,例如,如果您下载图像。

with io.open("path/to/file.dat", mode="wb") as fd:
    fd.write(response.content)