Programming language: Go
License: MIT License
Tags: Networking     HTTP Clients    

req alternatives and similar packages

Based on the "HTTP Clients" category.
Alternatively, view req alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of req or a related project?

Add another 'HTTP Clients' Package



Simple Go HTTP client with Black Magic


Full documentation is available on the official website: https://req.cool.


  • Simple and Powerful: Simple and easy to use, providing rich client-level and request-level settings, all of which are intuitive and chainable methods.
  • Easy Debugging: Powerful and convenient debug utilities, including debug logs, performance traces, and even dump the complete request and response content (see Debugging).
  • Easy API Testing: API testing can be done with minimal code, no need to explicitly create any Request or Client, or even to handle errors (See Quick HTTP Test)
  • Smart by Default: Detect and decode to utf-8 automatically if possible to avoid garbled characters (See Auto Decode), marshal request body and unmarshal response body automatically according to the Content-Type.
  • Support Multiple HTTP Versions: Support HTTP/1.1, HTTP/2, and HTTP/3, and can automatically detect the server side and select the optimal HTTP version for requests, you can also force the protocol if you want (See Force HTTP version).
  • Support Retry: Support automatic request retry and is fully customizable (See Retry).
  • Easy Download and Upload: You can download and upload files with simple request settings, and even set a callback to show real-time progress (See Download and Upload).
  • Exportable: req.Transport is exportable. Compared with http.Transport, it also supports HTTP3, dump content, middleware, etc. It can directly replace the Transport of http.Client in existing projects, and obtain more powerful functions with minimal code change.
  • Extensible: Support Middleware for Request, Response, Client and Transport (See Request and Response Middleware) and Client and Transport Middleware).

Get Started


You first need Go installed (version 1.16+ is required), then you can use the below Go command to install req:

go get github.com/imroc/req/v3


Import req to your code:

import "github.com/imroc/req/v3"

Basic Usage

// For testing, you can create and send a request with the global wrapper methods
// that use the default client behind the scenes to initiate the request (you can
// just treat package name `req` as a Client or Request, no need to create any client
// or Request explicitly).
req.DevMode() //  Use Client.DevMode to see all details, try and surprise :)
req.Get("https://httpbin.org/get") // Use Request.Get to send a GET request.

// In production, create a client explicitly and reuse it to send all requests
client := req.C(). // Use C() to create a client and set with chainable client settings.
    SetTimeout(5 * time.Second).
resp, err := client.R(). // Use R() to create a request and set with chainable request settings.
    SetHeader("Accept", "application/vnd.github.v3+json").
    SetPathParam("username", "imroc").
    SetQueryParam("page", "1").
    SetResult(&result). // Unmarshal response into struct automatically if status code >= 200 and <= 299.
    SetError(&errMsg). // Unmarshal response into struct automatically if status code >= 400.
    EnableDump(). // Enable dump at request level to help troubleshoot, log content only when an unexpected exception occurs.
if err != nil {
    // Handle error.
    // ...
if resp.IsSuccess() {
    // Handle result.
    // ...
if resp.IsError() {
    // Handle errMsg.   
    // ...
// Handle unexpected response (corner case).
err = fmt.Errorf("got unexpected response, raw dump:\n%s", resp.Dump())
// ...

You can also use another style if you want:

resp := client.Get("https://api.github.com/users/{username}/repos"). // Create a GET request with specified URL.
    SetHeader("Accept", "application/vnd.github.v3+json").
    SetPathParam("username", "imroc").
    SetQueryParam("page", "1").
    Do() // Send request with Do.

if resp.Err != nil {
    // ...
// ...


The following is a series of video tutorials for req:


Check more introduction, tutorials, examples, best practices and API references on the official website.


If you have a bug report or feature request, you can open an issue, and pull requests are also welcome.


If you have questions, feel free to reach out to us in the following ways:


Req released under MIT license, refer [LICENSE](LICENSE) file.

*Note that all licence references and agreements mentioned in the req README section above are relevant to that project's source code only.