krop
v0.4.8
Published
make a fast requests and simplify your code
Downloads
40
Maintainers
Readme
Features
- [x] Proxy
- [x] Http(s)
- [ ] Socks4/5
- [x] Support Http2 (test website/api support for http/2 here https://tools.keycdn.com/http2-test)
- [x] Support TLS 1.3, as even Cloudflare said "In a nutshell, TLS 1.3 is faster and more secure than TLS 1.2"
- [x] Automatic request/response data parse
- [x] Decompression body from gzip, deflate and brotli automatic
- [x] Session for automatic storage cookies
- [x] Already with types
- [x] 0 dependencies
- [x] 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
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);
});
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 quickget
request just pass thestring
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.