当前位置:  首页>> 技术小册>> Go开发权威指南(下)

示例:

1、实现Get请求方法

  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "net/http"
  6. )
  7. func main() {
  8. requestUrl := "http://www.baidu.com"
  9. response, err := http.Get(requestUrl)
  10. if err != nil {
  11. fmt.Println(err)
  12. }
  13. defer response.Body.Close()
  14. body, _ := ioutil.ReadAll(response.Body)
  15. fmt.Println(string(body))
  16. }

2、实现post请求方法

  1. package main
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io/ioutil"
  6. "net/http"
  7. "net/url"
  8. )
  9. func main() {
  10. requestUrl := "http://www.baidu.com/"
  11. postValue := url.Values{
  12. "username": {"aa"},
  13. "address": {"bb"},
  14. "subject": {"cc"},
  15. "form": {"dd"},
  16. }
  17. //request, err := http.PostForm(requestUrl, postValue)
  18. body := bytes.NewBufferString(postValue.Encode())
  19. request, err := http.Post(requestUrl, "text/html", body)
  20. if err != nil {
  21. fmt.Println(err)
  22. }
  23. defer request.Body.Close()
  24. fmt.Println(request.StatusCode)
  25. if request.StatusCode == 200 {
  26. rb, err := ioutil.ReadAll(request.Body)
  27. if err != nil {
  28. fmt.Println(rb)
  29. }
  30. fmt.Println(string(rb))
  31. }
  32. }

3、 实现PostForm请求方法

  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "net/url"
  6. "net/http"
  7. )
  8. func main() {
  9. requestUrl := "http://www.baidu.com/"
  10. postValue := url.Values{
  11. "username": {"aa"},
  12. "address": {"bb"},
  13. "subject": {"cc"},
  14. "form": {"dd"},
  15. }
  16. request, err := http.PostForm(requestUrl, postValue)
  17. if err != nil {
  18. fmt.Println(err)
  19. }
  20. defer request.Body.Close()
  21. fmt.Println(request.StatusCode)
  22. if request.StatusCode == 200 {
  23. rb, err := ioutil.ReadAll(request.Body)
  24. if err != nil {
  25. fmt.Println(rb)
  26. }
  27. fmt.Println(string(rb))
  28. }
  29. }

4、http.Do

使用http.Do方法可以在请求的时候设置头参数、cookie之类的数据。

  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "net/http"
  6. )
  7. func main() {
  8. client := &http.Client{}
  9. request, err := http.NewRequest("GET", "http://www.baidu.com", nil)
  10. if err != nil {
  11. fmt.Println(err)
  12. }
  13. cookie := &http.Cookie{Name: "JERRY", Value: "dkfsf"}
  14. request.AddCookie(cookie) //向request中添加cookie
  15. //设置request的header
  16. request.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
  17. response, err := client.Do(request)
  18. if err != nil {
  19. fmt.Println(err)
  20. return
  21. }
  22. defer response.Body.Close()
  23. fmt.Println(response.StatusCode)
  24. if response.StatusCode == 200 {
  25. r, err := ioutil.ReadAll(response.Body)
  26. if err != nil {
  27. fmt.Println(err)
  28. }
  29. fmt.Println(string(r))
  30. }
  31. }

5、json清求

  1. package main
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "io/ioutil"
  8. "net/http"
  9. "net/url"
  10. "strings"
  11. )
  12. type Student struct {
  13. Name string
  14. }
  15. func main() {
  16. requestUrl:="http://127.0.0.1:8090/"
  17. stu := Student{
  18. Name:"lamber",
  19. }
  20. s,_ := json.Marshal(&stu)
  21. HttPJson("GET",requestUrl,s)
  22. }
  23. func HttPJson(method string, url string, postValue[]byte) ([]byte, error) {
  24. body:=bytes.NewBuffer([]byte(postValue))
  25. req, err := http.NewRequest(method, url, body)
  26. if err != nil {
  27. return nil, err
  28. }
  29. req.Header.Set("Content-Type", "application/json")
  30. res, err := http.DefaultClient.Do(req)
  31. if err != nil {
  32. return nil, err
  33. }
  34. defer res.Body.Close()
  35. if res.StatusCode == http.StatusOK {
  36. return nil, errors.New(fmt.Sprintf("response status code %v", res.StatusCode))
  37. }
  38. rb, err := ioutil.ReadAll(res.Body)
  39. if err != nil {
  40. return nil, err
  41. }
  42. return rb, nil
  43. }

6、 PUT请求

  1. package main
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "io/ioutil"
  8. "net/http"
  9. )
  10. type Student struct {
  11. Name string
  12. }
  13. func main() {
  14. requestUrl:="http://127.0.0.1:8090/"
  15. stu := Student{
  16. Name:"lamber",
  17. }
  18. s,_ := json.Marshal(&stu)
  19. HttpPut(requestUrl,s)
  20. }
  21. func HttpPut( url string, params []byte) ([]byte, error) {
  22. body := bytes.NewBuffer(params)
  23. req, err := http.NewRequest("PUT", url, body)
  24. if err != nil {
  25. return nil, err
  26. }
  27. res, err := http.DefaultClient.Do(req)
  28. if err != nil {
  29. return nil, err
  30. }
  31. defer res.Body.Close()
  32. if res.StatusCode == http.StatusOK {
  33. return nil, errors.New(fmt.Sprintf("response status code %v", res.StatusCode))
  34. }
  35. rb, err := ioutil.ReadAll(res.Body)
  36. if err != nil {
  37. return nil, err
  38. }
  39. return rb, nil
  40. }

7、 delete请求

  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. "io/ioutil"
  6. "net/http"
  7. )
  8. type Student struct {
  9. Name string
  10. }
  11. func main() {
  12. requestUrl:="http://127.0.0.1:8090/"
  13. HttpDelete(requestUrl)
  14. }
  15. func HttpDelete( url string) ([]byte, error) {
  16. req, err := http.NewRequest("DELETE", url, nil)
  17. if err != nil {
  18. return nil, err
  19. }
  20. res, err := http.DefaultClient.Do(req)
  21. if err != nil {
  22. return nil, err
  23. }
  24. defer res.Body.Close()
  25. if res.StatusCode == http.StatusOK {
  26. return nil, errors.New(fmt.Sprintf("response status code %v", res.StatusCode))
  27. }
  28. rb, err := ioutil.ReadAll(res.Body)
  29. if err != nil {
  30. return nil, err
  31. }
  32. return rb, nil
  33. }

8、上传文件

  1. package main
  2. import (
  3. "bytes"
  4. "errors"
  5. "fmt"
  6. "io"
  7. "io/ioutil"
  8. "mime/multipart"
  9. "net/http"
  10. "os"
  11. )
  12. type Student struct {
  13. Name string
  14. }
  15. func main() {
  16. requestUrl:="http://127.0.0.1:8090/upload"
  17. path, _ := os.Getwd()
  18. path += "/test.txt"
  19. extraParams := map[string]string{
  20. "name": "hi",
  21. }
  22. //extraParams 提交别的参数
  23. res,err:=HttpPostFiles(requestUrl,extraParams,"file",path)
  24. fmt.Println(res,err)
  25. }
  26. func HttpPostFiles(uri string, params map[string]string, paramName, path string) ([]byte, error) {
  27. file, err := os.Open(path)
  28. if err != nil {
  29. return nil, err
  30. }
  31. defer file.Close()
  32. // 实例化multipart
  33. body := &bytes.Buffer{}
  34. writer := multipart.NewWriter(body)
  35. // 创建multipart 文件字段,注意paramName要跟服务端一致
  36. part, err := writer.CreateFormFile(paramName, path)
  37. if err != nil {
  38. return nil, err
  39. }
  40. _, err = io.Copy(part, file)
  41. for key, val := range params {
  42. _ = writer.WriteField(key, val)
  43. }
  44. err = writer.Close()
  45. if err != nil {
  46. return nil, err
  47. }
  48. request, err := http.NewRequest("POST", uri, body)
  49. request.Header.Set("Content-Type", writer.FormDataContentType())
  50. res, err := http.DefaultClient.Do(request)
  51. if res.StatusCode != http.StatusOK {
  52. return nil, errors.New(fmt.Sprintf("response status code %v", res.StatusCode))
  53. }
  54. rb, err := ioutil.ReadAll(res.Body)
  55. if err != nil {
  56. return nil, err
  57. }
  58. return rb, nil
  59. }

该分类下的相关小册推荐: