├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── header.md
├── resources.json
└── src
├── index.js
└── package.json
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 | *.lcov
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | jspm_packages/
43 |
44 | # Snowpack dependency directory (https://snowpack.dev/)
45 | web_modules/
46 |
47 | # TypeScript cache
48 | *.tsbuildinfo
49 |
50 | # Optional npm cache directory
51 | .npm
52 |
53 | # Optional eslint cache
54 | .eslintcache
55 |
56 | # Microbundle cache
57 | .rpt2_cache/
58 | .rts2_cache_cjs/
59 | .rts2_cache_es/
60 | .rts2_cache_umd/
61 |
62 | # Optional REPL history
63 | .node_repl_history
64 |
65 | # Output of 'npm pack'
66 | *.tgz
67 |
68 | # Yarn Integrity file
69 | .yarn-integrity
70 |
71 | # dotenv environment variables file
72 | .env
73 | .env.test
74 |
75 | # parcel-bundler cache (https://parceljs.org/)
76 | .cache
77 | .parcel-cache
78 |
79 | # Next.js build output
80 | .next
81 | out
82 |
83 | # Nuxt.js build / generate output
84 | .nuxt
85 | dist
86 |
87 | # Gatsby files
88 | .cache/
89 | # Comment in the public line in if your project uses Gatsby and not Next.js
90 | # https://nextjs.org/blog/next-9-1#public-directory-support
91 | # public
92 |
93 | # vuepress build output
94 | .vuepress/dist
95 |
96 | # Serverless directories
97 | .serverless/
98 |
99 | # FuseBox cache
100 | .fusebox/
101 |
102 | # DynamoDB Local files
103 | .dynamodb/
104 |
105 | # TernJS port file
106 | .tern-port
107 |
108 | # Stores VSCode versions used for testing VSCode extensions
109 | .vscode-test
110 |
111 | # yarn v2
112 | .yarn/cache
113 | .yarn/unplugged
114 | .yarn/build-state.yml
115 | .yarn/install-state.gz
116 | .pnp.*
117 |
118 | .env
119 |
120 | functions/
121 |
122 | build/
123 |
124 | package-lock.json
125 |
126 | README-dev.md
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | Thank you for taking interest in contributing to this project.
4 |
5 | **Please do not edit README.md directly**
6 |
7 | Instead, add the resource under its corresponding language to `resources.json` in the form of:
8 |
9 | ```json
10 | {
11 | "Language Name": [
12 | ...,
13 | {
14 | "name": "name of the project",
15 | "repo": "github user/repo"
16 | }
17 | ]
18 | }
19 | ```
20 |
21 | If the programming language of your project is not currently a part of the file, feel free to add it.
22 |
23 | ## Guidelines
24 |
25 | * Add one link per Pull Request.
26 | * Make sure the PR title is in the format of `Add project-name`.
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2022-present Easybase
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # awesome-http
4 | 📖 A curated list of HTTP clients for various languages & libraries
5 |
6 |
7 | > _Pull Requests welcomed. Please see the [Contributing Guide](CONTRIBUTING.md) before opening a Pull Request._
8 |
9 |
10 |
11 | [^Comment]: Thank you awesome-scala for the template
12 |
13 | ## Programming Languages
14 |
15 | * [JavaScript](#javascript)
16 | * [Python](#python)
17 | * [Java](#java)
18 | * [Rust](#rust)
19 | * [Swift](#swift)
20 | * [Haskell](#haskell)
21 | * [Go](#go)
22 | * [C++](#c)
23 | * [PHP](#php)
24 | * [Bash/Shell](#bashshell)
25 |
26 | ### JavaScript
27 | Name | Description | GitHub Activity
28 | ---- | ----------- | ---------------
29 | [Axios](https://github.com/axios/axios) | Promise based HTTP client for the browser and node.js |  
30 | [node-fetch](https://github.com/node-fetch/node-fetch) | A light-weight module that brings the Fetch API to Node.js |  
31 | [Got](https://github.com/sindresorhus/got) | 🌐 Human-friendly and powerful HTTP request library for Node.js |  
32 | [superagent](https://github.com/visionmedia/superagent) | Ajax for Node.js and browsers (JS HTTP client) |  
33 | [Needle](https://github.com/tomas/needle) | Nimble, streamable HTTP client for Node.js. With proxy, iconv, cookie, deflate & multipart support. |  
34 |
35 | ### Python
36 | Name | Description | GitHub Activity
37 | ---- | ----------- | ---------------
38 | [Requests](https://github.com/psf/requests) | A simple, yet elegant, HTTP library. |  
39 | [urllib3](https://github.com/urllib3/urllib3) | Python HTTP library with thread-safe connection pooling, file post support, user friendly, and more. |  
40 | [httplib2](https://github.com/httplib2/httplib2) | Small, fast HTTP client library for Python. Features persistent connections, cache, and Google App … |  
41 | [GRequests](https://github.com/spyoungtech/grequests) | Requests + Gevent = <3 |  
42 | [Uplink](https://github.com/prkumar/uplink) | A Declarative HTTP Client for Python |  
43 |
44 | ### Java
45 | Name | Description | GitHub Activity
46 | ---- | ----------- | ---------------
47 | [Eclipse Jetty](https://github.com/eclipse/jetty.project) | Eclipse Jetty® - Web Container & Clients - supports HTTP/2, HTTP/1.1, HTTP/1.0, websocket, servlets… |  
48 | [OkHttp](https://github.com/square/okhttp) | Square’s meticulous HTTP client for the JVM, Android, and GraalVM. |  
49 | [Heritrix](https://github.com/internetarchive/heritrix3) | Heritrix is the Internet Archive's open-source, extensible, web-scale, archival-quality web crawler… |  
50 | [Apache HttpClient](https://github.com/apache/httpcomponents-client) | Mirror of Apache HttpClient |  
51 | [Google HTTP Client Library](https://github.com/googleapis/google-http-java-client) | Google HTTP Client Library for Java |  
52 | [Http Request](https://github.com/kevinsawicki/http-request) | Java HTTP Request Library |  
53 |
54 | ### Rust
55 | Name | Description | GitHub Activity
56 | ---- | ----------- | ---------------
57 | [reqwest](https://github.com/seanmonstar/reqwest) | An easy and powerful Rust HTTP Client |  
58 | [hyper](https://github.com/hyperium/hyper) | An HTTP library for Rust |  
59 | [Isahc](https://github.com/sagebind/isahc) | The practical HTTP client that is fun to use. |  
60 | [Surf](https://github.com/http-rs/surf) | Fast and friendly HTTP client framework for async Rust |  
61 | [curl-rust](https://github.com/alexcrichton/curl-rust) | Rust bindings to libcurl |  
62 |
63 | ### Swift
64 | Name | Description | GitHub Activity
65 | ---- | ----------- | ---------------
66 | [Alamofire](https://github.com/Alamofire/Alamofire) | Elegant HTTP Networking in Swift |  
67 | [SwiftHTTP](https://github.com/daltoniam/SwiftHTTP) | Thin wrapper around NSURLSession in swift. Simplifies HTTP requests. |  
68 | [Net](https://github.com/nghialv/Net) | Http Request wrapper written in Swift |  
69 | [Moya](https://github.com/Moya/Moya) | Network abstraction layer written in Swift. |  
70 | [Just](https://github.com/dduan/Just) | Swift HTTP for Humans |  
71 | [Kingfisher](https://github.com/onevcat/Kingfisher) | A lightweight, pure-Swift library for downloading and caching images from the web. |  
72 |
73 | ### Haskell
74 | Name | Description | GitHub Activity
75 | ---- | ----------- | ---------------
76 | [Req](https://github.com/mrkkrp/req) | An HTTP client library |  
77 | [http-client](https://github.com/snoyberg/http-client) | An HTTP client engine, intended as a base layer for more user-friendly packages. |  
78 | [servant-client](https://github.com/haskell-servant/servant) | Main repository for the servant libraries — DSL for describing, serving, querying, mocking, documen… |  
79 | [http-streams](https://github.com/aesiniath/http-streams) | Haskell HTTP client library for use with io-streams |  
80 |
81 | ### Go
82 | Name | Description | GitHub Activity
83 | ---- | ----------- | ---------------
84 | [Req](https://github.com/imroc/req) | Simple Go HTTP client with Black Magic |  
85 | [Resty](https://github.com/go-resty/resty) | Simple HTTP and REST client library for Go |  
86 | [Sling](https://github.com/dghubble/sling) | A Go HTTP client library for creating and sending API requests |  
87 | [requests](https://github.com/asmcos/requests) | A golang HTTP client library. Salute to python requests. |  
88 |
89 | ### C++
90 | Name | Description | GitHub Activity
91 | ---- | ----------- | ---------------
92 | [Apache Serf](https://github.com/apache/serf) | Mirror of Apache Serf |  
93 | [Curl for People](https://github.com/libcpr/cpr) | C++ Requests: Curl for People, a spiritual port of Python Requests. |  
94 | [cpp-netlib](https://github.com/cpp-netlib/cpp-netlib) | The C++ Network Library Project -- cross-platform, standards compliant networking library. |  
95 | [Webcc](https://github.com/sprinfall/webcc) | Lightweight C++ HTTP client and server library based on Asio for embedding purpose. |  
96 | [Proxygen](https://github.com/facebook/proxygen) | A collection of C++ HTTP libraries including an easy to use HTTP server. |  
97 | [cpp-httplib](https://github.com/yhirose/cpp-httplib) | A C++ header-only HTTP/HTTPS server and client library |  
98 | [NFHTTP](https://github.com/spotify/NFHTTP) | A cross platform C++ HTTP library that interfaces natively to other platforms. |  
99 | [EasyHttp](https://github.com/sony/easyhttpcpp) | A cross-platform HTTP client library with a focus on usability and speed |  
100 |
101 | ### PHP
102 | Name | Description | GitHub Activity
103 | ---- | ----------- | ---------------
104 | [Guzzle](https://github.com/guzzle/guzzle) | Guzzle, an extensible PHP HTTP client |  
105 | [HTTPlug](https://github.com/php-http/httplug) | HTTPlug, the HTTP client abstraction for PHP |  
106 | [HTTP Client](https://github.com/amphp/http-client) | Async HTTP/1.1+2 client for PHP based on Amp. |  
107 | [SendGrid HTTP Client](https://github.com/sendgrid/php-http-client) | SendGrid's PHP HTTP Client for calling APIs |  
108 | [Buzz](https://github.com/kriswallsmith/Buzz) | PHP's lightweight HTTP client |  
109 |
110 | ### Bash/Shell
111 | Name | Description | GitHub Activity
112 | ---- | ----------- | ---------------
113 | [HTTPie](https://github.com/httpie/httpie) | As easy as /aitch-tee-tee-pie/ 🥧 Modern, user-friendly command-line HTTP client for the API era. J… |  
114 | [curl](https://github.com/curl/curl) | A command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, … |  
115 | [aria2](https://github.com/aria2/aria2) | aria2 is a lightweight multi-protocol & multi-source, cross platform download utility operated in c… |  
116 | [HTTP Prompt](https://github.com/httpie/http-prompt) | An interactive command-line HTTP and API testing client built on top of HTTPie featuring autocomple… |  
117 | [Resty](https://github.com/micha/resty) | Little command line REST client that you can use in pipelines (bash or zsh). |  
118 | [Ain](https://github.com/jonaslu/ain) | A HTTP API client for the terminal |  
119 |
120 |
--------------------------------------------------------------------------------
/header.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # awesome-http
4 | 📖 A curated list of HTTP clients for various languages & libraries
5 |
6 |
7 | > _Pull Requests welcomed. Please see the [Contributing Guide](CONTRIBUTING.md) before opening a Pull Request._
8 |
9 |
10 |
11 | [^Comment]: Thank you awesome-scala for the template
12 |
13 | ## Programming Languages
14 |
15 | * [JavaScript](#javascript)
16 | * [Python](#python)
17 | * [Java](#java)
18 | * [Rust](#rust)
19 | * [Swift](#swift)
20 | * [Haskell](#haskell)
21 | * [Go](#go)
22 | * [C++](#c)
23 | * [PHP](#php)
24 | * [Bash/Shell](#bashshell)
--------------------------------------------------------------------------------
/resources.json:
--------------------------------------------------------------------------------
1 | {
2 | "JavaScript": [
3 | {
4 | "name": "Axios",
5 | "repo": "axios/axios"
6 | },
7 | {
8 | "name": "node-fetch",
9 | "repo": "node-fetch/node-fetch"
10 | },
11 | {
12 | "name": "Got",
13 | "repo": "sindresorhus/got"
14 | },
15 | {
16 | "name": "superagent",
17 | "repo": "visionmedia/superagent"
18 | },
19 | {
20 | "name": "Needle",
21 | "repo": "tomas/needle"
22 | }
23 | ],
24 | "Python": [
25 | {
26 | "name": "Requests",
27 | "repo": "psf/requests"
28 | },
29 | {
30 | "name": "urllib3",
31 | "repo": "urllib3/urllib3"
32 | },
33 | {
34 | "name": "httplib2",
35 | "repo": "httplib2/httplib2"
36 | },
37 | {
38 | "name": "GRequests",
39 | "repo": "spyoungtech/grequests"
40 | },
41 | {
42 | "name": "Uplink",
43 | "repo": "prkumar/uplink"
44 | }
45 | ],
46 | "Java": [
47 | {
48 | "name": "Eclipse Jetty",
49 | "repo": "eclipse/jetty.project"
50 | },
51 | {
52 | "name": "OkHttp",
53 | "repo": "square/okhttp"
54 | },
55 | {
56 | "name": "Heritrix",
57 | "repo": "internetarchive/heritrix3"
58 | },
59 | {
60 | "name": "Apache HttpClient",
61 | "repo": "apache/httpcomponents-client"
62 | },
63 | {
64 | "name": "Google HTTP Client Library",
65 | "repo": "googleapis/google-http-java-client"
66 | },
67 | {
68 | "name": "Http Request",
69 | "repo": "kevinsawicki/http-request"
70 | }
71 | ],
72 | "Rust": [
73 | {
74 | "name": "reqwest",
75 | "repo": "seanmonstar/reqwest"
76 | },
77 | {
78 | "name": "hyper",
79 | "repo": "hyperium/hyper"
80 | },
81 | {
82 | "name": "Isahc",
83 | "repo": "sagebind/isahc"
84 | },
85 | {
86 | "name": "Surf",
87 | "repo": "http-rs/surf"
88 | },
89 | {
90 | "name": "curl-rust",
91 | "repo": "alexcrichton/curl-rust"
92 | }
93 | ],
94 | "Swift": [
95 | {
96 | "name": "Alamofire",
97 | "repo": "Alamofire/Alamofire"
98 | },
99 | {
100 | "name": "SwiftHTTP",
101 | "repo": "daltoniam/SwiftHTTP"
102 | },
103 | {
104 | "name": "Net",
105 | "repo": "nghialv/Net"
106 | },
107 | {
108 | "name": "Moya",
109 | "repo": "Moya/Moya"
110 | },
111 | {
112 | "name": "Just",
113 | "repo": "dduan/Just"
114 | },
115 | {
116 | "name": "Kingfisher",
117 | "repo": "onevcat/Kingfisher"
118 | }
119 | ],
120 | "Haskell": [
121 | {
122 | "name": "Req",
123 | "repo": "mrkkrp/req"
124 | },
125 | {
126 | "name": "http-client",
127 | "repo": "snoyberg/http-client"
128 | },
129 | {
130 | "name": "servant-client",
131 | "repo": "haskell-servant/servant"
132 | },
133 | {
134 | "name": "http-streams",
135 | "repo": "aesiniath/http-streams"
136 | }
137 | ],
138 | "Go": [
139 | {
140 | "name": "Req",
141 | "repo": "imroc/req"
142 | },
143 | {
144 | "name": "Resty",
145 | "repo": "go-resty/resty"
146 | },
147 | {
148 | "name": "Sling",
149 | "repo": "dghubble/sling"
150 | },
151 | {
152 | "name": "requests",
153 | "repo": "asmcos/requests"
154 | }
155 | ],
156 | "C++": [
157 | {
158 | "name": "Apache Serf",
159 | "repo": "apache/serf"
160 | },
161 | {
162 | "name": "Curl for People",
163 | "repo": "libcpr/cpr"
164 | },
165 | {
166 | "name": "cpp-netlib",
167 | "repo": "cpp-netlib/cpp-netlib"
168 | },
169 | {
170 | "name": "Webcc",
171 | "repo": "sprinfall/webcc"
172 | },
173 | {
174 | "name": "Proxygen",
175 | "repo": "facebook/proxygen"
176 | },
177 | {
178 | "name": "cpp-httplib",
179 | "repo": "yhirose/cpp-httplib"
180 | },
181 | {
182 | "name": "NFHTTP",
183 | "repo": "spotify/NFHTTP"
184 | },
185 | {
186 | "name": "EasyHttp",
187 | "repo": "sony/easyhttpcpp"
188 | }
189 | ],
190 | "PHP": [
191 | {
192 | "name": "Guzzle",
193 | "repo": "guzzle/guzzle"
194 | },
195 | {
196 | "name": "HTTPlug",
197 | "repo": "php-http/httplug"
198 | },
199 | {
200 | "name": "HTTP Client",
201 | "repo": "amphp/http-client"
202 | },
203 | {
204 | "name": "SendGrid HTTP Client",
205 | "repo": "sendgrid/php-http-client"
206 | },
207 | {
208 | "name": "Buzz",
209 | "repo": "kriswallsmith/Buzz"
210 | }
211 | ],
212 | "Bash/Shell": [
213 | {
214 | "name": "HTTPie",
215 | "repo": "httpie/httpie"
216 | },
217 | {
218 | "name": "curl",
219 | "repo": "curl/curl"
220 | },
221 | {
222 | "name": "aria2",
223 | "repo": "aria2/aria2"
224 | },
225 | {
226 | "name": "HTTP Prompt",
227 | "repo": "httpie/http-prompt"
228 | },
229 | {
230 | "name": "Resty",
231 | "repo": "micha/resty"
232 | },
233 | {
234 | "name": "Ain",
235 | "repo": "jonaslu/ain"
236 | }
237 | ]
238 | }
239 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | var dotenv = require('dotenv');
2 | dotenv.config();
3 | var axios = require('axios').default;
4 | var { readFileSync, writeFileSync } = require('fs');
5 |
6 | const MAX_DESCRIPTION_LENGTH = 100;
7 |
8 | function formatDescription(description) {
9 | if (description) {
10 | if (description.length > MAX_DESCRIPTION_LENGTH) {
11 | return description.substr(0, MAX_DESCRIPTION_LENGTH - 1) + "\u2026";
12 | } else {
13 | return description;
14 | }
15 | } else {
16 | return "_No description provided_"
17 | }
18 | }
19 |
20 | async function main() {
21 | const resources = JSON.parse(readFileSync('../resources.json'));
22 | const header = readFileSync('../header.md');
23 |
24 | const allAPIData = {};
25 | async function githubApiToMap({ name, repo }) {
26 | // https://docs.github.com/en/rest/reference/repos
27 | const githubApiRes = await axios.get(`https://api.github.com/repos/${repo}`, {
28 | headers: {
29 | Accept: "application/vnd.github.v3+json"
30 | },
31 | auth: process.env.GITHUB_USERNAME ? {
32 | username: process.env.GITHUB_USERNAME,
33 | password: process.env.GITHUB_ACCESS_TOKEN
34 | } : undefined
35 | });
36 | allAPIData[repo] = githubApiRes.data;
37 | }
38 |
39 | await Promise.all(Object.values(resources).flat().map(singleResource => githubApiToMap(singleResource)));
40 |
41 | let finalMdString = header + "\n\n";
42 | for (const [lang, repos] of Object.entries(resources)) {
43 | finalMdString += `### ${lang}\nName | Description | GitHub Activity\n---- | ----------- | ---------------`;
44 | for (const currResource of repos) {
45 | const { name, repo } = currResource;
46 | const { description, size, stargazers_count, watchers_count /** ...etc */ } = allAPIData[repo];
47 | finalMdString += `\n[${name}](https://github.com/${repo}) | ${formatDescription(description)} |  `
48 | }
49 | finalMdString += "\n\n";
50 | }
51 | writeFileSync("README-dev.md", finalMdString);
52 | }
53 |
54 | require.main === module && main();
--------------------------------------------------------------------------------
/src/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "awesome-http-src",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "author": "Easybase",
6 | "license": "MIT",
7 | "dependencies": {
8 | "axios": "^0.26.0",
9 | "dotenv": "^16.0.0"
10 | }
11 | }
12 |
--------------------------------------------------------------------------------