From 9f59dbc16308a818ae4192886b763038f65b8050 Mon Sep 17 00:00:00 2001 From: Kieran Hartnett Date: Fri, 22 Feb 2019 13:32:01 -0800 Subject: [PATCH 1/2] added option to override request --- README.md | 6 ++++++ src/core/render-core.js | 9 +++++++++ src/http/render-http.js | 5 +++++ src/util/validation.js | 8 ++++++++ 4 files changed, 28 insertions(+) diff --git a/README.md b/README.md index 3228597d..f76d4c0f 100644 --- a/README.md +++ b/README.md @@ -192,6 +192,9 @@ screenshot.clip.x | number | - | Specifies x-coordinate of top-left corner of cl screenshot.clip.y | number | - | Specifies y-coordinate of top-left corner of clipping region of the page. screenshot.clip.width | number | - | Specifies width of clipping region of the page. screenshot.clip.height | number | - | Specifies height of clipping region of the page. +request.headers | object | - | (POST only) Override request headers. +request.method | string | - | Override request method. +request.postData | string | - | Override request postData. **Example:** @@ -250,6 +253,9 @@ The only required parameter is `url`. // Passed to Puppeteer page.screenshot() screenshot: { ... }, + + // Intercepts and overrides request + request: { ...}, } ``` diff --git a/src/core/render-core.js b/src/core/render-core.js index 4c4d9bd0..ba77e02a 100644 --- a/src/core/render-core.js +++ b/src/core/render-core.js @@ -1,5 +1,6 @@ const puppeteer = require('puppeteer'); const _ = require('lodash'); +const qs = require('qs'); const config = require('../config'); const logger = require('../util/logger')(__filename); @@ -72,6 +73,14 @@ async function render(_opts = {}) { } }); + if (opts.request) { + await page.setRequestInterception(true); + page.on('request', (request) => { + request.continue(opts.request); + }); + } + + let data; try { logger.info('Set browser viewport..'); diff --git a/src/http/render-http.js b/src/http/render-http.js index 2a5c2c2d..d845c133 100644 --- a/src/http/render-http.js +++ b/src/http/render-http.js @@ -113,6 +113,11 @@ function getOptsFromQuery(query) { }, omitBackground: query['screenshot.omitBackground'], }, + request: { + headers: query['request.headers'], + method: query['request.method'], + postData: query['request.postData'], + }, }; return opts; } diff --git a/src/util/validation.js b/src/util/validation.js index 3c42074e..6b53e1de 100644 --- a/src/util/validation.js +++ b/src/util/validation.js @@ -62,6 +62,9 @@ const sharedQuerySchema = Joi.object({ 'screenshot.clip.width': Joi.number(), 'screenshot.clip.height': Joi.number(), 'screenshot.omitBackground': Joi.boolean(), + // 'request.headers': Joi.object(), // any way to send an object? + 'request.method': Joi.string().valid(['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH']), + 'request.postData': Joi.string(), }); const renderQuerySchema = Joi.object({ @@ -126,6 +129,11 @@ const renderBodyObject = Joi.object({ omitBackground: Joi.boolean(), }), failEarly: Joi.string(), + request: Joi.object({ + headers: Joi.object(), + method: Joi.string().valid(['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH']), + postData: Joi.string(), + }), }); const renderBodySchema = Joi.alternatives([ From 7c1e974dd6864b4cf52bf5dd9534781c2d784002 Mon Sep 17 00:00:00 2001 From: Kieran Hartnett Date: Mon, 25 Feb 2019 10:47:07 -0800 Subject: [PATCH 2/2] removed unused require --- src/core/render-core.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/render-core.js b/src/core/render-core.js index ba77e02a..93222796 100644 --- a/src/core/render-core.js +++ b/src/core/render-core.js @@ -1,6 +1,5 @@ const puppeteer = require('puppeteer'); const _ = require('lodash'); -const qs = require('qs'); const config = require('../config'); const logger = require('../util/logger')(__filename);