UNPKG

5.02 kBMarkdownView Raw
1English | [简体中文](./README.zh-CN.md)
2
3# electron-request
4
5> Zero-dependency, Lightweight HTTP request client for Electron or Node.js
6
7## Why electron-request ?
8
9Electron-request uses its built-in net module in Electron environment and uses its built-in HTTP module in Node.js environment.
10
11Net module is used in electron to better support proxy, authentication, traffic monitoring proxies and other features. Please refer to [net](https://www.electronjs.org/docs/api/net) for details.
12
13## Features
14
15- Zero-dependency, Lightweight
16- Quick start, similar window.fetch
17- No need to import other libraries, support file download progress and file verification
18- Support to run on Electron or Node.js, use Electron's net module first
19- Unified error handling
20
21## Install
22
23```bash
24npm install electron-request --save
25# or
26yarn add electron-request
27```
28
29## Usage
30
31```ts
32import request from 'electron-request';
33
34void (async () => {
35 const url = 'https://github.com/';
36 const defaultOptions = {
37 method: 'GET',
38 body: null,
39 followRedirect: true,
40 maxRedirectCount: 20,
41 timeout: 0,
42 size: 0,
43 };
44 const response = await request(url, defaultOptions);
45 const text = await response.text();
46})();
47```
48
49## API
50
51### request(url[, options])
52
53- url: Request URL
54
55- options: Options
56
57 ```ts
58 interface Options {
59 /**
60 * Request method
61 * @default 'GET'
62 */
63 method?: string;
64 /**
65 * Request body
66 * @default null
67 */
68 body?: string | null | Buffer | Stream;
69 /**
70 * Request headers
71 */
72 headers?: Record<string, string | string[]>;
73 /**
74 * Request query
75 */
76 query?: Record<string, string>;
77 /**
78 * Allow redirect
79 * @default true
80 */
81 followRedirect?: boolean;
82 /**
83 * Maximum redirect count. 0 to not follow redirect
84 * @default 20
85 */
86 maxRedirectCount?: number;
87 /**
88 * Request/Response timeout in ms. 0 to disable
89 * @default 0
90 */
91 timeout?: number;
92 /**
93 * Maximum response body size in bytes. 0 to disable
94 * @default 0
95 */
96 size?: number;
97 /**
98 * Whether to use nodejs native request
99 * @default false
100 */
101 useNative?: boolean;
102
103 // Docs: https://www.electronjs.org/docs/api/client-request#new-clientrequestoptions
104
105 /**
106 * Only in Electron. When use authenticated HTTP proxy, username to use to authenticate
107 */
108 username?: string;
109 /**
110 * Only in Electron. When use authenticated HTTP proxy, password to use to authenticate
111 */
112 password?: string;
113 /**
114 * Only in Electron. Whether to send cookies with this request from the provided session
115 * @default true
116 */
117 useSessionCookies?: boolean;
118 /**
119 * Only in Electron. The Session instance with which the request is associated
120 * @default electron.session.defaultSession
121 */
122 session?: Session;
123 }
124 ```
125
126### Response
127
128```ts
129interface Response {
130 /** Whether the response was successful (status in the range 200-299) */
131 ok: boolean;
132 /** Response headers */
133 headers: Record<string, string | string[]>;
134 /** Return origin stream */
135 stream: Stream;
136 /** Decode response as ArrayBuffer */
137 arrayBuffer(): Promise<ArrayBuffer>;
138 /** Decode response as Blob */
139 blob(): Promise<Blob>;
140 /** Decode response as text */
141 text(): Promise<string>;
142 /** Decode response as json */
143 json<T>(): Promise<T>;
144 /** Decode response as buffer */
145 buffer(): Promise<Buffer>;
146 /**
147 * Download file to destination
148 * @param {Writable} destination Writable destination stream
149 * @param {ProgressCallback=} onProgress Download progress callback
150 * @param {ValidateOptions=} validateOptions Validate options
151 */
152 download: (
153 destination: Writable,
154 onProgress?: ProgressCallback,
155 validateOptions?: ValidateOptions,
156 ) => Promise<void>;
157}
158
159/** Download progress information */
160interface ProgressInfo {
161 /** Total file bytes */
162 total: number;
163 /** Delta file bytes */
164 delta: number;
165 /** Transferred file bytes */
166 transferred: number;
167 /** Transferred percentage */
168 percent: number;
169 /** Bytes transferred per second */
170 bytesPerSecond: number;
171}
172```
173
174## License
175
176[MIT License](./LICENSE)
177
178## electron-request vs. the Competition
179
180| Package | Size |
181| --- | --- |
182| request | [![request package size](https://packagephobia.now.sh/badge?p=request)](https://packagephobia.now.sh/result?p=request) |
183| axios | [![axios package size](https://packagephobia.now.sh/badge?p=axios)](https://packagephobia.now.sh/result?p=axios) |
184| node-fetch | [![node-fetch package size](https://packagephobia.now.sh/badge?p=node-fetch)](https://packagephobia.now.sh/result?p=node-fetch) |
185| request-pure | [![request-pure package size](https://packagephobia.now.sh/badge?p=request-pure)](https://packagephobia.now.sh/result?p=request-pure) |
186| electron-request | [![electron-request package size](https://packagephobia.now.sh/badge?p=electron-request)](https://packagephobia.now.sh/result?p=electron-request) |