nightmare-webrequest-addon
Version:
340 lines (255 loc) • 10 kB
Markdown
# nightmare-webrequest-addon
[](http://standardjs.com/) [](http://badge.fury.io/js/nightmare-webrequest-addon) [](https://travis-ci.org/kyungw00k/nightmare-webrequest-addon/)
> The `webRequest` API set allows to intercept and modify contents of a request at various stages of its lifetime.
> (from https://github.com/electron/electron/blob/master/docs/api/session.md#seswebrequest)
This is the wrapper of Electron API `session.webRequest`.
## Install
```
npm install --save nightmare-webrequest-addon
```
## Usage
### `nightmare.onBeforeRequest([filter, ]listener)`
* `filter` Object
* `listener` Function
The `listener` will be called with `listener(details, callback)` when a request
is about to occur.
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `uploadData` Array (optional)
* `callback` Function
The `uploadData` is an array of `data` objects:
* `data` Object
* `bytes` Buffer - Content being sent.
* `file` String - Path of file being uploaded.
The `callback` has to be called with an `response` object:
* `response` Object
* `cancel` Boolean (optional)
* `redirectURL` String (optional) - The original request is prevented from
being sent or completed, and is instead redirected to the given URL.
**Note: `listener` is Electron-side context, cannot access any variable/function outside of `listener`**
If you want to use `details` Object in the nodeJS-side, use `nightmare.on('onBeforeRequest', callback)`
The `callback` has to be called with an `details` object:
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `uploadData` Array (optional)
See the [example](test/webrequest-on-before-request.spec.js).
### `nightmare.onBeforeSendHeaders([filter, ]listener)`
* `filter` Object
* `listener` Function
The `listener` will be called with `listener(details, callback)` before sending
an HTTP request, once the request headers are available. This may occur after a
TCP connection is made to the server, but before any http data is sent.
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `requestHeaders` Object
* `callback` Function
The `callback` has to be called with an `response` object:
* `response` Object
* `cancel` Boolean (optional)
* `requestHeaders` Object (optional) - When provided, request will be made
with these headers.
**Note: `listener` is Electron-side context, cannot access any variable/function outside of `listener`**
If you want to use `details` Object in the nodeJS-side, use `nightmare.on('onBeforeSendHeaders', callback)`
The `callback` has to be called with an `details` object:
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `requestHeaders` Object
See the [example](test/webrequest-on-before-send-headers.spec.js).
### `nightmare.onSendHeaders([filter, ]listener)`
* `filter` Object
* `listener` Function
The `listener` will be called with `listener(details)` just before a request is
going to be sent to the server, modifications of previous `onBeforeSendHeaders`
response are visible by the time this listener is fired.
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `requestHeaders` Object
**Note: `listener` is Electron-side context, cannot access any variable/function outside of `listener`**
If you want to use `details` Object in the nodeJS-side, use `nightmare.on('onBeforeSendHeaders', callback)`
The `callback` has to be called with an `details` object:
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `requestHeaders` Object
See the [example](test/webrequest-on-send-headers.spec.js).
### `nightmare.onHeadersReceived([filter,]listener)`
* `filter` Object
* `listener` Function
The `listener` will be called with `listener(details, callback)` when HTTP
response headers of a request have been received.
* `details` Object
* `id` String
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `statusLine` String
* `statusCode` Integer
* `responseHeaders` Object
* `callback` Function
The `callback` has to be called with an `response` object:
* `response` Object
* `cancel` Boolean
* `responseHeaders` Object (optional) - When provided, the server is assumed
to have responded with these headers.
* `statusLine` String (optional) - Should be provided when overriding
`responseHeaders` to change header status otherwise original response
header's status will be used.
**Note: `listener` is Electron-side context, cannot access any variable/function outside of `listener`**
If you want to use `details` Object in the nodeJS-side, use `nightmare.on('onHeadersReceived', callback)`
The `callback` has to be called with an `details` object:
* `details` Object
* `id` String
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `statusLine` String
* `statusCode` Integer
* `responseHeaders` Object
See the [example](test/webrequest-on-headers-received.spec.js).
### `nightmare.onResponseStarted([filter, ]listener)`
* `filter` Object
* `listener` Function
The `listener` will be called with `listener(details)` when first byte of the
response body is received. For HTTP requests, this means that the status line
and response headers are available.
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `responseHeaders` Object
* `fromCache` Boolean - Indicates whether the response was fetched from disk
cache.
* `statusCode` Integer
* `statusLine` String
**Note: `listener` is Electron-side context, cannot access any variable/function outside of `listener`**
If you want to use `details` Object in the nodeJS-side, use `nightmare.on('onResponseStarted', callback)`
The `callback` has to be called with an `details` object:
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `responseHeaders` Object
* `fromCache` Boolean - Indicates whether the response was fetched from disk
cache.
* `statusCode` Integer
* `statusLine` String
See the [example](test/webrequest-on-response-started.spec.js).
### `nightmare.onBeforeRedirect([filter, ]listener)`
* `filter` Object
* `listener` Function
The `listener` will be called with `listener(details)` when a server initiated
redirect is about to occur.
* `details` Object
* `id` String
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `redirectURL` String
* `statusCode` Integer
* `ip` String (optional) - The server IP address that the request was
actually sent to.
* `fromCache` Boolean
* `responseHeaders` Object
**Note: `listener` is Electron-side context, cannot access any variable/function outside of `listener`**
If you want to use `details` Object in the nodeJS-side, use `nightmare.on('onBeforeRedirect', callback)`
The `callback` has to be called with an `details` object:
* `details` Object
* `id` String
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `redirectURL` String
* `statusCode` Integer
* `ip` String (optional) - The server IP address that the request was
actually sent to.
* `fromCache` Boolean
* `responseHeaders` Object
See the [example](test/webrequest-on-before-redirect.spec.js).
### `nightmare.onCompleted([filter, ]listener)`
* `filter` Object
* `listener` Function
The `listener` will be called with `listener(details)` when a request is
completed.
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `responseHeaders` Object
* `fromCache` Boolean
* `statusCode` Integer
* `statusLine` String
**Note: `listener` is Electron-side context, cannot access any variable/function outside of `listener`**
If you want to use `details` Object in the nodeJS-side, use `nightmare.on('onCompleted', callback)`
The `callback` has to be called with an `details` object:
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `responseHeaders` Object
* `fromCache` Boolean
* `statusCode` Integer
* `statusLine` String
See the [example](test/webrequest-on-completed.spec.js).
### `nightmare.onErrorOccurred([filter, ]listener)`
* `filter` Object
* `listener` Function
The `listener` will be called with `listener(details)` when an error occurs.
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `fromCache` Boolean
* `error` String - The error description.
**Note: `listener` is Electron-side context, cannot access any variable/function outside of `listener`**
If you want to use `details` Object in the nodeJS-side, use `nightmare.on('onErrorOccurred', callback)`
The `callback` has to be called with an `details` object:
* `details` Object
* `id` Integer
* `url` String
* `method` String
* `resourceType` String
* `timestamp` Double
* `fromCache` Boolean
* `error` String - The error description.
See the [example](test/webrequest-on-error-occurred.spec.js).
## Thanks to [@rosshinkley](https://github.com/rosshinkley/)
This module is heavily inspired by [nightmare-load-filter](https://github.com/rosshinkley/nightmare-load-filter)
## License
MIT