Skip to content

korizyx/krop

Repository files navigation

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

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

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

CommonJS

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);
});

ESM/TS

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:[email protected]: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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published