krop v0.4.8
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
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: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.
13 days ago
1 month ago
1 month ago
1 month ago
1 month ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
5 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
10 months ago
11 months ago
11 months ago
11 months ago
10 months ago
11 months ago
11 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago