• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go网络请求篇

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

---恢复内容开始---

今天特意找了下go的网络请求篇,get请求是ok的,post请求一直不下来,搜索了下,代码都差不多,无法拿到post数据,先整理一篇,亲测可用。

针对post ,先来说下post 四种提交数据方式(Content-Type)  链接

  • application/x-www-form-urlencoded      key1=val1&key2=val2       PHP 中,$_POST['title'] 可以获取到 title 的值,$_POST['sub'] 可以得到 sub 数组。
  • multipart/form-data     文件上传
  • application/json    在请求头中 Content-Type 为 application/json 时,从 php://input 里获得原始输入流

 

  • text/xml       不熟悉

 

  我当时测试的为php接口,然后content-type 写成了 application/json,然后怎么post都是拿到的域名的html页面代码。以下为测试通过代码

    

 

1、get请求

 1 package main
 2 
 3 import (
 4     "bytes"
 5     "fmt"
 6     "log"
 7     "net/http"
 8     "reflect"
 9 )
10 
11 func main() {
12 
13     url := "http://api.budejie.com/api/api_open.php?a=list&appname=baisibudejie_hd&asid=C1180CB8-F460-4385-A77C-97CD1AA83DFD&c=data&client=ipad&device=ios%20%E8%AE%BE%E5%A4%87&from=ios&jbk=0&mac=02:00:00:00:00:00&market=&maxtime=&openudid=78336166d6a434b4cf1634410eb3b692d6d3a4ee&order=ctime&page=1&per=20000&systemversion=7.1&type=10&ver=2.0.3"
14 
15     resp, err := http.Get(url)
16 
17     if err != nil {
18         // 错误处理
19         log.Println(err)
20         return
21     }
22 
23     defer resp.Body.Close() //关闭链接
24 
25     fmt.Printf("resp status %s,statusCode %d\n", resp.Status, resp.StatusCode)
26 
27     fmt.Printf("resp Proto %s\n", resp.Proto)
28 
29     fmt.Printf("resp content length %d\n", resp.ContentLength)
30 
31     fmt.Printf("resp transfer encoding %v\n", resp.TransferEncoding)
32 
33     fmt.Printf("resp Uncompressed %t\n", resp.Uncompressed)
34 
35     fmt.Println(reflect.TypeOf(resp.Body))
36     buf := bytes.NewBuffer(make([]byte, 0, 512))
37     length, _ := buf.ReadFrom(resp.Body)
38     fmt.Println(len(buf.Bytes()))
39     fmt.Println(length)
40     fmt.Println(string(buf.Bytes()))
41 }

2、post请求

package main

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
	"time"
)

func main() {

	url := "http://api.budejie.com/api/api_open.php"
	var data map[string]string /*创建集合 */
	data = make(map[string]string)
	data["a"] = "list"
	data["appname"] = "baisibudejie_hd"
	data["asid"] = "C1180CB8-F460-4385-A77C-97CD1AA83DFD"
	data["c"] = "data"
	data["client"] = "ipad"
	data["device"] = "ios"
	data["from"] = "ios"
	data["jbk"] = "0"
	data["mac"] = "02:00:00:00:00:00"
	data["openudid"] = "78336166d6a434b4cf1634410eb3b692d6d3a4ee"
	data["order"] = "ctime"
	data["page"] = "1"
	data["per"] = "20"
	data["systemversion"] = "7.1"
	data["type"] = "10"
	data["ver"] = "2.0.3"
	data["market"] = ""
	data["maxtime"] = ""

	contentType := "application/x-www-form-urlencoded"
	json := Post(url, data, contentType)
	fmt.Println(json)

}

//发送POST请求
//url:请求地址,data:POST请求提交的数据,contentType:请求体格式,如:application/json
//content:请求放回的内容
func Post(urlStr string, data map[string]string, contentType string) (content string) {
	postValues := url.Values{}
	for postKey, PostValue := range data {
		postValues.Set(postKey, PostValue)
	}
	postDataStr := postValues.Encode()
	postDataBytes := []byte(postDataStr)
	postBytesReader := bytes.NewReader(postDataBytes)
	req, err := http.NewRequest("POST", urlStr, postBytesReader)
	req.Header.Add("content-type", contentType)
	if err != nil {
		panic(err)
	}
	defer req.Body.Close()

	client := &http.Client{Timeout: 5 * time.Second}
	resp, error := client.Do(req)
	if error != nil {
		panic(error)
	}
	defer resp.Body.Close()

	result, _ := ioutil.ReadAll(resp.Body)
	content = string(result)
	return
}



 

 

 

---恢复内容结束---


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go查找解决runtimeerror:invalidmemoryaddressornilpointerdereference的问题发布时间:2022-07-10
下一篇:
go-百度贴吧-纵向爬取发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap