-
-
Save ijt/950790 to your computer and use it in GitHub Desktop.
package main | |
import ( | |
"fmt" | |
"io" | |
"log" | |
"net/http" | |
"os" | |
) | |
func main() { | |
if len(os.Args) != 2 { | |
fmt.Fprintf(os.Stderr, "Usage: %s URL\n", os.Args[0]) | |
os.Exit(1) | |
} | |
response, err := http.Get(os.Args[1]) | |
if err != nil { | |
log.Fatal(err) | |
} | |
defer response.Body.Close() | |
_, err := io.Copy(os.Stdout, response.Body) | |
if err != nil { | |
log.Fatal(err) | |
} | |
} |
problem in line 11
replace it with
response, err := http.Get("http://golang.org/")
👍
fmt.Printf("%s", err) --> fmt.Printf("%s\n", err)
thanks for the example, i was looking for this.
but what a ugly language is this :S:S:S
it's definitely not for lazy people like me
@daft117 actually it is, because it prevents you from making terrible mistakes coming from sloppiness ;)
Thanks for sharing, has come in useful!
Very useful ! Thank you ! 👍
Hey thanks for this.
I noticed that if you simulate a situation where you cannot resolve the adress you are trying to 'get', the error handling on handling on line 13 isn't that useful. This is some example output.
%s (0x784698,0xc820076e10)
Using log.Fatal(err)
seems to render the proper error. Maybe the log package wasnt a thing in go back when this example was made :)
I wanted to know if there is any other way to read from response body apart from what has been mentioned. I'm new to Golang and just exploring other means and ways to do things.
Hi,
So lets say I wanted to implement this as a rest endpoint. And in the method it would look up in a cache to see if the response was already cached. If cached, return cache, if not, do a new get and save that in the cache. How would a possible solution for this look like?
I can't seem to get this to work with a url with https. Is there additional setup needed?
Hello!
I also can't send a request for HTTPS urls.
What could be a problem?
Hi all, sorry I didn't update this for so long. I forgot about it and didn't see any notifications for your posts. Anyway, it's updated now. Enjoy!
thanks, quickly got me running with go/http..
Great! Exactly the kind of bare bones example I needed to see. Thanks for sharing this.
Thanks for sharing, it's so great.
This info was very helpful, however. Is there a way to pick out just the response status?
The response status (200, 404, etc.) is available in response.StatusCode
. You don't need to read the body for the status code.
Hi All,
I am not able to see content of get response from a server . Could you please let me know how to get the response .Am seeing hexadecimal values from output
Pasted my code below:
+++++++++++++++
package main
import (
"fmt"
"net/http"
"io"
"os"
// "encoding/json"
)
func main() {
url := "http://localhost:8080/api/v1/networks"
res, err := http.Get(url)
if err != nil {
panic(err)
}
fmt.Println("response from GET request" ,res)
fmt.Println("output of pnmid", res.Body)
defer res.Body.Close()
, err := io.Copy(os.Stdout, response.Body)
// fmt.Println("whole body",)
body, err := ioutil.ReadAll(res.Body)
if err != nil {
panic(err)
}
fmt.Println("response body" , res.Body)
Please help me on this to fix the issue.
I tried in below way and got output:
package main
import (
"fmt"
"net/http"
// "io"
// "os"
// "encoding/json"
)
func main() {
url := "http://localhost:3000/api/v1/subnets"
res, err := http.Get(url)
if err != nil {
panic(err)
}
fmt.Println("response from GET request" ,res)
fmt.Println("output of pnmid", res.Body)
defer res.Body.Close()
// , err := io.Copy(os.Stdout, response.Body)
// fmt.Println("whole body",)
/* body, err := ioutil.ReadAll(res.Body)
if err != nil {
panic(err)
}*/
fmt.Println("response body" , res.Body)
// fmt.Println(body)
// var p Payload
// err := json.Unmarshal(body , &p)
}
After execution:
go run Sample_restcall.go:
response from GET request &{200 OK 200 HTTP/1.1 1 1 map[Access-Control-Allow-Origin:[*] Content-Type:[application/json; charset=utf-8] Set-Cookie:[dcbfef97e14c2a3cdf00a5
afc32d1e96=d9871f0ca4d0f07b0c6b84a4d79d8153; path=/; HttpOnly] X-Powered-By:[Express] Access-Control-Allow-Headers:[Content-Type] Access-Control-Allow-Methods:[PUT, GET,
POST, DELETE, OPTIONS] Content-Length:[676] Etag:[W/"2a4-JHwpbMIyxGxUzMU+0J4onQ"] Date:[Fri, 21 Jul 2017 15:24:47 GMT] Cache-Control:[private]] 0xc04203e300 676 [] fals
e false map[] 0xc042030400 }
output of pnmid &{0xc04203e2c0 {0 0} false 0x5cb870 0x5cb800}
response body &{0xc04203e2c0 {0 0} false 0x5cb870 0x5cb800}
I could see response status code as 200 , how to see response content and how to decode to normal json format.
Naveennani777, you see what it is, slice of bytes, you have to convert it to string, try this:
body, _ := ioutil.ReadAll(res.Body)
text := string(body)
fmt.Println(text)
Thanks alot sibyakin , Its working now.
thank you :)
Thank you :)
How to pass header in GET request
How to pass header in GET request
How to pass header in GET request
Here is an example:
client := &http.Client{}
apiURL := "https://myapi.url/data"
req, err := http.NewRequest("GET", apiURL, nil)
if err != nil {
return nil, err
}
// add header to request
req.Header.Add("authkey", "...")
// perform get request
res, err := client.Do(req)
You dont need the else
since your os.Exit'ing on condition of Line 12
@R4wm, done.
You replace the printf/exit combination with: Log.Fatal;
http://golang.org/pkg/log/#Fatal