Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

krop

kori_xyz38MIT0.4.8TypeScript support: included

make a fast requests and simplify your code

request, powerful, stealth, simple, session, simple request, fast request, native request, proxy request, small package, https client request, automatic json parser, media support, cookie session

readme

powerful and fast

Make simple and fast stealth requests, supporting the recently tls versions and any proxies (auth/port:ip). To make better stealth request

npm version Coverage Status GitHub file size in bytes npm downloads Known Vulnerabilities


Features

  • <input checked="" disabled="" type="checkbox"> Proxy
    • <input checked="" disabled="" type="checkbox"> Http(s)
    • <input disabled="" type="checkbox"> Socks4/5
  • <input checked="" disabled="" type="checkbox"> Support Http2 (test website/api support for http/2 here https://tools.keycdn.com/http2-test)
  • <input checked="" disabled="" type="checkbox"> Support TLS 1.3, as even Cloudflare said "In a nutshell, TLS 1.3 is faster and more secure than TLS 1.2"
  • <input checked="" disabled="" type="checkbox"> Automatic request/response data parse
  • <input checked="" disabled="" type="checkbox"> Decompression body from gzip, deflate and brotli automatic
  • <input checked="" disabled="" type="checkbox"> Session for automatic storage cookies
  • <input checked="" disabled="" type="checkbox"> Already with types
  • <input checked="" disabled="" type="checkbox"> 0 dependencies
  • <input checked="" disabled="" type="checkbox"> Fastest between Superagent, Axios and Got
    <img src="https://i.imgur.com/jFERStu.png">

Install

Available for any computer running nodejs

yarn

yarn add krop

npm

npm install krop

Examples

this module is avaliable for CommonJS or ESM/Typescript

<summary> CommonJS </summary>

simple get

const krop = require("krop");

krop("discord.com").then(console.log);

cookie session

const { Session } = require("krop");

const session = new Session({
  // default options for all requests in this session
  headers: {
    authorization: "Berear ...",
  },
});
session.default_options; // change them anytime!

session
  .req({
    url: "discord.com", // automatic add https:// in the url
  })
  .then((response) => {
    console.log(
      response,
      /**
       * cookies saved from previous request (automatic save)
       */
      session.cookies
    );
  });

using proxy

const krop = require("krop");

krop({
  url: "https://api.ipify.org/?format=json",
  /**
   * automatic parse proxy (supporting auth config)
   */
  proxy: "47.254.153.200:80", // or "username:password@host:port"
  timeout: 10000,
}).then((response) => {
  /**
   * returns proxy ip
   */
  console.log(response.data);
});

downloading any media

const Request = require("krop");
const { writeFileSync } = require("fs");

Request({
  url: "https://pt.wikipedia.org/static/images/mobile/copyright/wikipedia.png",
}).then((response) => {
  // learn about https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
  const mime_type = {
    media: response.headers["content-type"].split("/")[0],
    extension: response.headers["content-type"].split("/")[1],
  };

  const file_name = `./${mime_type.media}.${mime_type.extension}`;

  /**
   * saving media
   */
  writeFileSync(
    file_name,
    /**
     * `response.data` automatic transforms media in buffer
     */
    response.data,
    {
      flag: "w+",
    }
  );

  console.log(response.headers["content-type"], response.data.length);
});

<summary> ESM/TS </summary>

simple get

import krop from "krop";

console.log(await krop("discord.com"));

cookie session

import krop from "krop";
const { Session } = krop;

const session = new Session({
  // default options for all requests in this session
  headers: {
    authorization: "Berear ...",
  },
});
session.default_options; // change them anytime!

const response = await session.req("discord.com");

console.log(
  response,
  /**
   * cookies saved from previous request (automatic save)
   */
  session.json()
);

using proxy

import krop from "krop";

const response = await krop({
  url: "https://api.ipify.org/?format=json",
  /**
   * automatic parse proxy (supporting auth config)
   */
  proxy: "47.254.153.200:80", // or "username:password@host:port"
  timeout: 10000,
});

/**
 * returns proxy ip
 */
console.log(response.data);

downloading any media

import krop from "krop";
import { writeFileSync } from "fs";

const response = await krop({
  url: "https://pt.wikipedia.org/static/images/mobile/copyright/wikipedia.png",
});

// learn about https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
const mime_type = {
  media: response.headers["content-type"].split("/")[0],
  extension: response.headers["content-type"].split("/")[1],
};
const file_name = `./${mime_type.media}.${mime_type.extension}`;

/**
 * saving media
 */
writeFileSync(
  file_name,
  /**
   * `response.data` automatic transforms media in buffer
   */
  response.data,
  {
    flag: "w+",
  }
);

console.log(response.headers["content-type"], response.data.length);

Request Config

Tip: By default, krop is a function, to make a quick get request just pass the string containing the domain, example: krop("www.google.com")

{
  // `url` is the server URL that will be used for the request - Automatic add https://
  url: 'https://example.com/',

  // `method` is the request method to be used when making the request
  method: 'GET', // default

  // `headers` are custom headers to be sent
  headers: {'X-Requested-With': 'XMLHttpRequest'},

  // `payload` is the data to be sent as the request body
  // Only applicable for request methods 'PUT', 'POST', 'DELETE , and 'PATCH'
  // must be of one of the following types:
  // - string, plain object
  payload: {
    firstName: 'Fred'
  },

  // syntax alternative to send payload into the body
  payload: 'Country=Foo&City=Bar',

  // `timeout` specifies the number of milliseconds before the request times out.
  // If the request takes longer than `timeout`, the request will be aborted.
  timeout: 1000,

  // `proxy` defines the hostname, port, and protocol of the proxy server or string content  all.
  proxy: {
    protocol: 'https', // default
    host: '127.0.0.1',
    port: 80,
    username: 'foo',
    password: 'bar'
  },

   // support string, automatic parse - Automatic add https://
  proxy: 'https://foo:bar@127.0.0.1:80',

  // support http2
  http2: false, // default

  // if do a error it's try again
  retry: 0, // default

  // version for use tls
  tlsVersion: 'TLSv1' | 'TLSv1.1' | 'TLSv1.2' | 'TLSv1.3',

  ciphers: "TLS_AES_128_GCM_SHA256:...",
}

Response Example

It always sees these parameters as a response, but depending on the HTTP protocol level, more things can come up

{
  status: number,
  headers: {
    ...
  },
  data: {
    ...
  }
}

License

This project is licensed under the MIT - see the LICENSE file for details.