{"id":14989919,"url":"https://github.com/lsk569937453/rcurl","last_synced_at":"2026-01-19T05:06:41.581Z","repository":{"id":234417875,"uuid":"788843799","full_name":"lsk569937453/rcurl","owner":"lsk569937453","description":null,"archived":false,"fork":false,"pushed_at":"2024-06-07T00:31:04.000Z","size":86,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-10-29T22:56:18.697Z","etag":null,"topics":["curl","http","http-client","http-clients"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lsk569937453.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-19T07:38:26.000Z","updated_at":"2024-08-21T23:21:02.000Z","dependencies_parsed_at":"2024-04-28T01:51:04.279Z","dependency_job_id":"e9ca631a-ff21-4693-b0d1-16ce9f874938","html_url":"https://github.com/lsk569937453/rcurl","commit_stats":{"total_commits":84,"total_committers":2,"mean_commits":42.0,"dds":"0.011904761904761862","last_synced_commit":"0a82e69e1e6307880b81d352f9040238e40b8091"},"previous_names":["lsk569937453/rcurl"],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsk569937453%2Frcurl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsk569937453%2Frcurl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsk569937453%2Frcurl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lsk569937453%2Frcurl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lsk569937453","download_url":"https://codeload.github.com/lsk569937453/rcurl/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245743436,"owners_count":20665093,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["curl","http","http-client","http-clients"],"created_at":"2024-09-24T14:19:08.237Z","updated_at":"2026-01-19T05:06:41.574Z","avatar_url":"https://github.com/lsk569937453.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rcurl\n\n![Crates.io Version](https://img.shields.io/crates/v/rcurl.svg)![License](https://img.shields.io/crates/l/rcurl.svg)\n\n`rcurl` is a simple, powerful command-line tool for transferring data with URLs, inspired by cURL, and built in Rust.\n\n## Features\n\n- Support for HTTP/1.1, HTTP/2, and HTTP/2 with prior knowledge\n- Customizable HTTP methods (GET, POST, etc.)\n- Sending custom request body and form data\n- Custom headers, user-agent, cookies, and referrer\n- User authentication\n- Support for PEM certificates and insecure connections\n- File downloads and uploads\n- Byte range support\n- Verbose mode for debugging (-v, -vv)\n- Request timing breakdown (--time)\n- Proxy support (HTTP_PROXY, HTTPS_PROXY, ALL_PROXY, NO_PROXY)\n- Quick commands: ping, disk, telnet, DNS lookup, WHOIS, port query\n- Interactive mode with request history\n\n## rcurl vs curl\n\nrcurl is a modern reimagining of curl, built with Rust for enhanced safety, better developer experience, and extended functionality.\n\n| Feature | rcurl | curl |\n| :--- | :--- | :--- |\n| **Language** | Rust (Memory-safe, modern) | C (Legacy, manual memory management) |\n| **Core Functionality** | Full curl-compatible HTTP/S/FTP/SFTP | Full protocol support |\n| **Interactive Mode** | Request history \u0026 replay | Not available |\n| **Timing Analysis** | Multi-phase breakdown (DNS, TCP, TLS, etc.) | Basic time_total only |\n| **Network Diagnostics** | Built-in ping, DNS, whois, telnet | Requires external tools |\n| **Developer Experience** | Colored output, progress bars, cleaner CLI | Traditional Unix style |\n| **Quick Commands** | Shorthand aliases (p, d, t, w, ns, l) | Not available |\n| **HTTP/2 Support** | Native support | Native support |\n| **Distribution** | Single static binary (cargo/release) | System package / build from source |\n\n**Why choose rcurl?**\n\n- **Modern \u0026 Safe**: Built with Rust for memory safety and reliability, eliminating entire classes of security vulnerabilities\n- **Better DX**: Interactive mode with request history, colored output, and intuitive shortcuts for daily workflows\n- **Enhanced Insights**: Detailed timing breakdown (DNS lookup, TCP handshake, TLS negotiation, transfer) for performance debugging\n- **All-in-One**: Network diagnostics (ping, DNS, whois, telnet) integrated—no need to switch tools\n- **Drop-in Replacement**: Compatible with curl's most-used options while adding powerful new features\n\n## Installation on Linux (Quick Start)\n\nFor Linux users, the quickest way to get started is by downloading the pre-compiled binary directly from GitHub Releases. This method does not require you to have the Rust toolchain installed.\n\n### Download the Latest Release\n\n```\ncurl -L -o rcurl https://github.com/lsk569937453/rcurl/releases/download/v0.0.27/rcurl-x86_64-unknown-linux-gnu\nchmod +x ./rcurl\n```\n\n## Installation\n\n### Install via Cargo\n\nIf you have Rust and Cargo installed, you can install `rcurl` directly from crates.io:\n\n```bash\ncargo install cargo-rcurl\n```\n\n### Build from Source\n\nAlternatively, you can install `rcurl` by cloning this repository and building it with Cargo:\n\n```bash\ngit clone https://github.com/lsk569937453/rcurl.git\ncd rcurl\ncargo install --path .\n```\n\n## Usage\n\n### Examples\n\n#### HTTP/HTTPS Requests\n\n**Make a simple GET request:**\n\n```bash\nrcurl http://www.google.com\n```\n\n**Download a webpage to a file:**\n\n```bash\nrcurl -o google.html http://www.google.com\n```\n\n**Send POST form data:**\n\n```bash\nrcurl -X POST -d \"param1=value1\u0026param2=value2\" http://httpbin.org/post\n```\n\n**Send JSON data with a custom header:**\n\n```bash\nrcurl -X POST -d '{\"name\":\"John Doe\"}' -H \"Content-Type: application/json\" http://httpbin.org/post\n```\n\n**View only the response headers (HEAD request):**\n\n```bash\nrcurl -I http://www.google.com\n```\n\n**Use a custom user-agent:**\n\n```bash\nrcurl -A \"MyCoolBrowser/1.0\" http://httpbin.org/user-agent\n```\n\n**Download a specific byte range:**\n\n```bash\nrcurl -r 0-1023 http://example.com/file.zip -o partial_file.zip\n```\n\n**Show request timing breakdown:**\n\n```bash\nrcurl https://example.com --time\n```\n\n**Verbose mode for debugging:**\n\n```bash\nrcurl -v http://example.com          # Debug level\nrcurl -vv https://example.com        # Trace level\n```\n\n#### FTP/FTPS/SFTP\n\n**FTP request:**\n\n```bash\nrcurl ftp://ftp.example.com\n```\n\n**FTPS (FTP over TLS):**\n\n```bash\nrcurl ftps://ftp.example.com\n```\n\n**SFTP with authentication:**\n\n```bash\nrcurl -u user:pass ftp://ftp.example.com\n```\n\n#### Quick Commands\n\n**Ping a host:**\n\n```bash\nrcurl ping google.com\nrcurl p 8.8.8.8          # Shorthand\n```\n\n**DNS lookup (like dig):**\n\n```bash\nrcurl ns google.com\n```\n\n**WHOIS lookup for domain information:**\n\n```bash\nrcurl whois google.com\nrcurl w example.com      # Shorthand\nrcurl whois 8.8.8.8       # IP lookup\n```\n\n**Check disk size:**\n\n```bash\nrcurl disk .             # Current directory\nrcurl d /home            # Specific path (shorthand)\n```\n\n**Telnet to a host:port:**\n\n```bash\nrcurl telnet example.com 80\nrcurl t 192.168.1.1 23   # Shorthand\n```\n\n**Port query - list all listening ports:**\n\n```bash\nrcurl port                # List all listening ports\nrcurl l                   # Shorthand\n```\n\n**Port query - find process by port:**\n\n```bash\nrcurl port 8080           # Find process using port 8080\n```\n\n**Port query - kill process by port:**\n\n```bash\nrcurl port 3000 --kill    # Kill process using port 3000\n```\n\n### Options\n\nBelow is a complete list of available command-line options:\n\n| Short | Long                        | Argument          | Description                                |\n| :---- | :-------------------------- | :---------------- | :----------------------------------------- |\n|       |                             | `url`             | The request URL.                           |\n| `-X`  | `--request`                 | `\u003cmethod\u003e`        | Specify request method to use.             |\n| `-d`  | `--data`                    | `\u003cdata\u003e`          | HTTP POST data.                            |\n| `-F`  | `--form`                    | `\u003cname=content\u003e`  | Specify multipart MIME data.               |\n| `-H`  | `--header`                  | `\u003cheader/@file\u003e`  | The http headers.                          |\n| `-c`  | `--certificate-path-option` | `\u003cpath\u003e`          | The pem path.                              |\n| `-u`  | `--user`                    | `\u003cuser:password\u003e` | Server user and password.                  |\n| `-A`  | `--user-agent`              | `\u003cname\u003e`          | Send User-Agent \u003cname\u003e to server.          |\n| `-b`  | `--cookie`                  | `\u003cdata            | filename\u003e`                                 |\n| `-e`  | `--referer`                 | `\u003cURL\u003e`           | Referrer URL.                              |\n| `-o`  | `--output`                  | `\u003cfile\u003e`          | Write to file instead of stdout.           |\n| `-T`  | `--upload-file`             | `\u003cfile\u003e`          | Transfer local FILE to destination.        |\n| `-Q`  | `--quote`                   | `\u003ccommand\u003e`       | Send command(s) to server before transfer. |\n| `-k`  | `--insecure`                |                   | Allow insecure server connections.         |\n| `-I`  | `--head`                    |                   | Show document info only.                   |\n| `-r`  | `--range`                   | `\u003crange\u003e`         | Retrieve only the bytes within RANGE.      |\n| `-v`  | `--verbose`                 |                   | Verbose mode (-v for debug, -vv for trace).|\n|       | `--http2`                   |                   | Use HTTP/2.                                |\n|       | `--http2-prior-knowledge`   |                   | Use HTTP/2 with prior knowledge.           |\n|       | `--noproxy`                 |                   | Disable use of proxy.                      |\n|       | `--time`                    |                   | Show timing information for request phases.|\n| `-h`  | `--help`                    |                   | Print help information.                    |\n| `-V`  | `--version`                 |                   | Print version information.                 |\n\n#### Quick Commands\n\n| Command | Shorthand | Argument | Description                      |\n| :------ | :-------- | :------- | :------------------------------- |\n| `ping`  | `p`       | `\u003ctarget\u003e` | Ping a host to check connectivity.|\n| `disk`  | `d`       | `\u003cpath\u003e`  | Check disk size for a path.      |\n| `telnet`| `t`       | `\u003chost\u003e \u003cport\u003e` | Telnet to a host and port.  |\n| `ns`    |           | `\u003cdomain\u003e`| DNS lookup (like dig).          |\n| `whois` | `w`       | `\u003ctarget\u003e` | WHOIS lookup for domain/IP info. |\n| `port`  | `l`       | `[port] [--kill]` | List/listening ports or find/kill process by port. |\n\n### Proxy Support\n\nSet environment variables to use proxy:\n\n```bash\n# Unix/Linux/MacOS\nexport ALL_PROXY=http://127.0.0.1:7890\nexport HTTPS_PROXY=http://127.0.0.1:7890\nexport HTTP_PROXY=http://127.0.0.1:7890\nexport NO_PROXY=example.com,localhost\n\n# Windows CMD\nset ALL_PROXY=http://127.0.0.1:7890\n\n# Windows PowerShell\n$env:ALL_PROXY='http://127.0.0.1:7890'\n```\n\nDisable proxy for a single request:\n\n```bash\nrcurl https://example.com --noproxy\n```\n\n### Interactive Mode\n\nWhen no URL or command is provided, `rcurl` enters interactive mode, allowing you to select and execute previous requests from history:\n\n```bash\nrcurl\n```\n\n## Contributing\n\nContributions are welcome! Feel free to fork the repository, make your changes, and submit a pull request.\n\n## License\n\nThis project is licensed under the [Apache License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flsk569937453%2Frcurl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flsk569937453%2Frcurl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flsk569937453%2Frcurl/lists"}