/renet

Primary LanguageJavaScriptMIT LicenseMIT

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

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:bar@127.0.0.1:80',

  // support http2
  http2: false // default
}

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.