Git Product home page Git Product logo

electron-request's Introduction

English | 简体中文

electron-request

Zero-dependency, Lightweight HTTP request client for Electron or Node.js

Why electron-request ?

Electron-request uses its built-in net module in Electron environment and uses its built-in HTTP module in Node.js environment.

Net module is used in electron to better support proxy, authentication, traffic monitoring proxies and other features. Please refer to net for details.

Features

  • Zero-dependency, Lightweight
  • Quick start, similar window.fetch
  • No need to import other libraries, support file download progress and file verification
  • Support to run on Electron or Node.js, use Electron's net module first
  • Unified error handling

Install

npm install electron-request --save
# or
yarn add electron-request

Usage

import request from 'electron-request';

void (async () => {
  const url = 'https://github.com/';
  const defaultOptions = {
    method: 'GET',
    body: null,
    followRedirect: true,
    maxRedirectCount: 20,
    timeout: 0,
    size: 0,
  };
  const response = await request(url, defaultOptions);
  const text = await response.text();
})();

API

request(url[, options])

  • url: Request URL

  • options: Options

    interface Options {
      /**
       * Request method
       * @default 'GET'
       */
      method?: string;
      /**
       * Request body
       * @default null
       */
      body?: string | null | Buffer | Stream;
      /**
       * Request headers
       */
      headers?: Record<string, string | string[]>;
      /**
       * Request query
       */
      query?: Record<string, string>;
      /**
       * Allow redirect
       * @default true
       */
      followRedirect?: boolean;
      /**
       * Maximum redirect count. 0 to not follow redirect
       * @default 20
       */
      maxRedirectCount?: number;
      /**
       * Request/Response timeout in ms. 0 to disable
       * @default 0
       */
      timeout?: number;
      /**
       * Maximum response body size in bytes. 0 to disable
       * @default 0
       */
      size?: number;
      /**
       * Whether to use nodejs native request
       * @default false
       */
      useNative?: boolean;
    
      // Docs: https://www.electronjs.org/docs/api/client-request#new-clientrequestoptions
    
      /**
       * Only in Electron. When use authenticated HTTP proxy, username to use to authenticate
       */
      username?: string;
      /**
       * Only in Electron. When use authenticated HTTP proxy, password to use to authenticate
       */
      password?: string;
      /**
       * Only in Electron. Whether to send cookies with this request from the provided session
       * @default true
       */
      useSessionCookies?: boolean;
      /**
       * Only in Electron. The Session instance with which the request is associated
       * @default electron.session.defaultSession
       */
      session?: Session;
    }

Response

interface Response {
  /** Convenience property representing if the request ended normally */
  ok: boolean;
  /** Response headers */
  headers: Record<string, string | string[]>;
  /** Return origin stream */
  stream: Stream;
  /** Decode response as ArrayBuffer */
  arrayBuffer(): Promise<ArrayBuffer>;
  /** Decode response as Blob */
  blob(): Promise<Blob>;
  /** Decode response as text */
  text(): Promise<string>;
  /** Decode response as json */
  json<T>(): Promise<T>;
  /** Decode response as buffer */
  buffer(): Promise<Buffer>;
  /**
   * Download file to destination
   * @param {Writable} destination Writable destination stream
   * @param {ProgressCallback=} onProgress Download progress callback
   * @param {ValidateOptions=} validateOptions Validate options
   */
  download: (
    destination: Writable,
    onProgress?: ProgressCallback,
    validateOptions?: ValidateOptions,
  ) => Promise<void>;
}

/** Download progress information */
interface ProgressInfo {
  /** Total file bytes */
  total: number;
  /** Delta file bytes */
  delta: number;
  /** Transferred file bytes */
  transferred: number;
  /** Transferred percentage */
  percent: number;
  /** Bytes transferred per second */
  bytesPerSecond: number;
}

License

MIT License

electron-request vs. the Competition

Package Size
request request package size
axios axios package size
node-fetch node-fetch package size
request-pure request-pure package size
electron-request electron-request package size

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.