Skip to content

Latest commit

 

History

41 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

license

requests

Requests is an HTTP library , it is easy to use. Similar to Python requests.

Installation

go get -u github.com/asmcos/requests

Start

package main

import "github.com/asmcos/requests"

func main (){

        resp,err := requests.Get("http://www.zhanluejia.net.cn")
        if err != nil{
          return
        }
        println(resp.Text())
}

Post

package main

import "github.com/asmcos/requests"


func main (){

        data := requests.Datas{
          "name":"requests_post_test",
        }
        resp,_ := requests.Post("https://www.httpbin.org/post",data)
        println(resp.Text())
}
 Server return data...
{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "name": "requests_post_test"
  },
  "headers": {
    "Accept-Encoding": "gzip",
    "Connection": "close",
    "Content-Length": "23",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "www.httpbin.org",
    "User-Agent": "Go-Requests 0.5"
  },
  "json": null,
  "origin": "114.242.34.110",
  "url": "https://www.httpbin.org/post"
}

PostJson

package main

import "github.com/asmcos/requests"


func main (){

        jsonStr := "{\"name\":\"requests_post_test\"}"
        resp,_ := requests.PostJson("https://www.httpbin.org/post",jsonStr)
        println(resp.Text())
}
 Server return data...
{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "name": "requests_post_test"
  },
  "headers": {
    "Accept-Encoding": "gzip",
    "Connection": "close",
    "Content-Length": "23",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "www.httpbin.org",
    "User-Agent": "Go-Requests 0.5"
  },
  "json": null,
  "origin": "114.242.34.110",
  "url": "https://www.httpbin.org/post"
}

Feature Support

  • Set headers
  • Set params
  • Multipart File Uploads
  • Sessions with Cookie Persistence
  • Proxy
  • Authentication
  • JSON
  • Chunked Requests
  • Debug
  • SetTimeout
  • Skip TLS certificate verification (SetInsecureSkipVerify)

Changelog (v0.9)

This release was completed with AI coding assistance. The following bugs from GitHub issues and pull requests were fixed:

  • #33 / PR #38 — HTTP/2 retry failed with cannot retry err ... define Request.GetBody. Request bodies are now rewindable via GetBody.
  • #37PostJson sent extra bytes in the body (chunked encoding / trailing newline from json.Encoder). Bodies now use Content-Length and json.Marshal.
  • #10http: ContentLength=N with Body length 0 when calling Get after Post on the same client. Stale body and Content-Length are cleared between requests.
  • PR #36 — Multipart uploads wrote files before form fields, which broke S3-style POSTs that require key first. Form fields are now written before files.
  • PR #39 — Errors were printed with fmt.Println. Errors are returned only, without extra stdout.
  • #23 / #7Post always overwrote Content-Type. The default application/x-www-form-urlencoded is set only when the caller did not set one.
  • #28 — No way to skip TLS verification (verify=False). Added SetInsecureSkipVerify. Proxy() no longer forces InsecureSkipVerify.
  • PR #22PostJson ignored URL query Params. Query parameters are now applied.
  • Host headerHeader{"Host": "..."} did not change the HTTP Host. It is now applied to Request.Host.
  • Resource leaks — Uploaded files and gzip readers were not closed. Both are closed after use.

Set header

example 1

req := requests.Requests()

resp,err := req.Get("http://www.zhanluejia.net.cn",requests.Header{"Referer":"http://www.jeapedu.com"})
if (err == nil){
  println(resp.Text())
}

example 2

req := requests.Requests()
req.Header.Set("accept-encoding", "gzip, deflate, br")
resp,_ := req.Get("http://www.zhanluejia.net.cn",requests.Header{"Referer":"http://www.jeapedu.com"})
println(resp.Text())

example 3

h := requests.Header{
  "Referer":         "http://www.jeapedu.com",
  "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
}
resp,_ := req.Get("http://wwww.zhanluejia.net.cn",h)

h2 := requests.Header{
  ...
  ...
}
h3,h4 ....
// two or more headers ...
resp,_ = req.Get("http://www.zhanluejia.net.cn",h,h2,h3,h4)

Set params

p := requests.Params{
  "title": "The blog",
  "name":  "file",
  "id":    "12345",
}
resp,_ := req.Get("http://www.cpython.org", p)

Auth

Test with the correct user information.

req := requests.Requests()
resp,_ := req.Get("https://api.github.com/user",requests.Auth{"asmcos","password...."})
println(resp.Text())

github return

{"login":"asmcos","id":xxxxx,"node_id":"Mxxxxxxxxx==".....

JSON

req := requests.Requests()
req.Header.Set("Content-Type","application/json")
resp,_ = req.Get("https://httpbin.org/json")

var json map[string]interface{}
resp.Json(&json)

for k,v := range json{
  fmt.Println(k,v)
}

SetTimeout

req := Requests()
req.Debug = 1

// 20 Second
req.SetTimeout(20)
req.Get("http://golang.org")

Get Cookies

resp,_ = req.Get("https://www.httpbin.org")
coo := resp.Cookies()
// coo is [] *http.Cookies
println("********cookies*******")
for _, c:= range coo{
  fmt.Println(c.Name,c.Value)
}

About

A golang HTTP client library. Salute to python requests.

Resources

Stars

660 stars

Watchers

17 watching

Forks

Releases

Packages

Used by

Contributors

Languages