grequests alternatives and similar packages
Based on the "Utilities" category.
Alternatively, view grequests alternatives based on common mentions on social networks and blogs.
-
xlsx
Library to simplify reading the XML format used by recent version of Microsoft Excel in Go programs. -
goreporter
A Golang tool that does static analysis, unit testing, code review and generate code quality report. -
go-funk
A modern Go utility library which provides helpers (map, find, contains, filter, chunk, reverse, ...) -
mc
Minio Client provides minimal tools to work with Amazon S3 compatible cloud storage and filesystems. -
mergo
A helper to merge structs and maps in Golang. Useful for configuration default values, avoiding messy if-statements. -
beaver
Beaver is a real-time messaging server. With beaver you can easily build scalable in-app notifications, realtime graphs, multiplayer games, chat applications, geotracking and more in web applications and mobile apps. -
httpcontrol
Package httpcontrol allows for HTTP transport level control around timeouts and retries.
Get performance insights in less than 4 minutes
Do you think we are missing an alternative of grequests or a related project?
README
GRequests
A Go "clone" of the great and famous Requests library
License
GRequests is licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for the full license text
Features
- Responses can be serialized into JSON and XML
- Easy file uploads
- Easy file downloads
- Support for the following HTTP verbs
GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS
Install
go get -u github.com/levigross/grequests
Usage
import "github.com/levigross/grequests"
Basic Examples
Basic GET request:
resp, err := grequests.Get("http://httpbin.org/get", nil)
// You can modify the request by passing an optional RequestOptions struct
if err != nil {
log.Fatalln("Unable to make request: ", err)
}
fmt.Println(resp.String())
// {
// "args": {},
// "headers": {
// "Accept": "*/*",
// "Host": "httpbin.org",
If an error occurs all of the other properties and methods of a Response
will be nil
Quirks
Request Quirks
When passing parameters to be added to a URL, if the URL has existing parameters that contradict with what has been passed within Params
โ Params
will be the "source of authority" and overwrite the contradicting URL parameter.
Lets see how it works...
ro := &RequestOptions{
Params: map[string]string{"Hello": "Goodbye"},
}
Get("http://httpbin.org/get?Hello=World", ro)
// The URL is now http://httpbin.org/get?Hello=Goodbye
Response Quirks
Order matters! This is because grequests.Response
is implemented as an io.ReadCloser
which proxies the http.Response.Body io.ReadCloser
interface. It also includes an internal buffer for use in Response.String()
and Response.Bytes()
.
Here are a list of methods that consume the http.Response.Body io.ReadCloser
interface.
- Response.JSON
- Response.XML
- Response.DownloadToFile
- Response.Close
- Response.Read
The following methods make use of an internal byte buffer
- Response.String
- Response.Bytes
In the code below, once the file is downloaded โ the Response
struct no longer has access to the request bytes
response := Get("http://some-wonderful-file.txt", nil)
if err := response.DownloadToFile("randomFile"); err != nil {
log.Println("Unable to download file: ", err)
}
// At this point the .String and .Bytes method will return empty responses
response.Bytes() == nil // true
response.String() == "" // true
But if we were to call response.Bytes()
or response.String()
first, every operation will succeed until the internal buffer is cleared:
response := Get("http://some-wonderful-file.txt", nil)
// This call to .Bytes caches the request bytes in an internal byte buffer โ which can be used again and again until it is cleared
response.Bytes() == `file-bytes`
response.String() == "file-string"
// This will work because it will use the internal byte buffer
if err := resp.DownloadToFile("randomFile"); err != nil {
log.Println("Unable to download file: ", err)
}
// Now if we clear the internal buffer....
response.ClearInternalBuffer()
// At this point the .String and .Bytes method will return empty responses
response.Bytes() == nil // true
response.String() == "" // true
*Note that all licence references and agreements mentioned in the grequests README section above
are relevant to that project's source code only.