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

今天特意找了下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请求

 package main

 import (
"bytes"
"fmt"
"log"
"net/http"
"reflect"
) func main() { 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" resp, err := http.Get(url) if err != nil {
// 错误处理
log.Println(err)
return
} defer resp.Body.Close() //关闭链接 fmt.Printf("resp status %s,statusCode %d\n", resp.Status, resp.StatusCode) fmt.Printf("resp Proto %s\n", resp.Proto) fmt.Printf("resp content length %d\n", resp.ContentLength) fmt.Printf("resp transfer encoding %v\n", resp.TransferEncoding) fmt.Printf("resp Uncompressed %t\n", resp.Uncompressed) fmt.Println(reflect.TypeOf(resp.Body))
buf := bytes.NewBuffer(make([]byte, , ))
length, _ := buf.ReadFrom(resp.Body)
fmt.Println(len(buf.Bytes()))
fmt.Println(length)
fmt.Println(string(buf.Bytes()))
}

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
}


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

go 网络请求篇的更多相关文章

  1. AFNetworking-2.5-源码阅读剖析--网络请求篇

    一.前言 AFNetworking,非常友好简单的网络请求第三方框架,在GitHub中已经获得了25000++的star,链接地址:https://github.com/AFNetworking/AF ...

  2. go 网络请求篇二

    框架地址:https://github.com/parnurzeal/gorequest package main //https://antarx.com/2018/05/05/gorequest- ...

  3. iOS开发网络篇—网络请求(HTTP协议)小结

    iOS开发网络篇—网络请求(HTTP协议)小结 iOS开发网络篇—网络请求(HTTP协议)小结 1. 聊一下HTTP协议(协议的完整的通信过程) 2.通信过程 1> 请求 * 客户端 --> ...

  4. iOS开发——实战篇Swift篇&UItableView结合网络请求,多线程,数据解析,MVC实战

    UItableView结合网络请求,多线程,数据解析,MVC实战 学了这么久的swift都没有做过什么东西,今天就以自己的一个小小的联系,讲一下,怎么使用swift在实战中应用MVC,并且结合后面的高 ...

  5. 第三篇、微信小程序-网络请求API

    wx.request(OBJECT)发起的是https请求.一个微信小程序,同时只能有5个网络请求连接. OBJECT参数说明: 效果图: net.js Page({ data:{ result:{} ...

  6. 第六十二篇、AFN3.0封装网络请求框架,支持缓存

    1.网络请求 第一种实现方式: 功能:GET POST 请求 缓存逻辑: 1.是否要刷新本地缓存,不需要就直接发起无缓存的网络请求,否则直接读取本地数据 2.需要刷新本地缓存,先读取本地数据,有就返回 ...

  7. 微信小程序教学第二章(含视频):小程序中级实战教程之预备篇 - 封装网络请求及 mock 数据

    § 封装网络请求及 mock 数据 本文配套视频地址: https://v.qq.com/x/page/i05544fogcm.html 开始前请把 ch2-3 分支中的 code/ 目录导入微信开发 ...

  8. 【cocos2d-js网络教程篇】cocos2d-js http网络请求

    前言 刚入手cocos2d-js,看到网上的JS的http网络请求,大部分都是错的.原因在于,js-tests里面的网络请求实例没有给出加载完成事件.正确的加载完成事件如下: var xhr = cc ...

  9. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

随机推荐

  1. React学习笔记(五)State&声明周期

    React学习笔记(五) 四.State&声明周期 可以为组件添加"状态(state)".状态与属性相似,但是状态是私有的,完全受控于当前组件. 局部状态就是只能用于类(定 ...

  2. 外部主机无法访问IIS发布的网站

    在IIS中发布网站,在本地可以直接访问,但是其他主机不能访问改发布的网站.   此问题一般是IIS的配置或者防火墙的配置的原因.     如果禁用了以下防火墙入站规则会导致外部主机无法访问本地发布的网 ...

  3. SharePoint问题杂集——要创建计时器作业,必须运行SVC

    问题场景:在SharePoint2010服务器上使用PowerShell部署解决方案时,遇到问题: 解决办法是进入控制面板----管理工具----服务,找到SharePoint 2010 Admini ...

  4. Spring Boot 的配置文件

    Profile 配置 Profile 是 Spring 用来针对不同的环境对不同的配置提供支持的,全局的 Profile 配置使用 application-{profile}.properties ( ...

  5. 缓存MEMCACHE php调用

    在项目中,涉及大访问量时,合理的使用缓存能减轻数据库的压力,同时提升用户体验.即在非实时性的需求的前提下,一小段时间内(若干秒),用于显示的数据从缓存中获取的,而不用直接读取数据库,能有效的减少数据库 ...

  6. Python中替换的三种方法

    strip()    replace()      re.sub() 1.replace()是python的内置函数,字符类型.replace(old,new) s1="你好2017&quo ...

  7. 使用jenkins SonarQube gitlab 构建自动化发布系统

    目前持续集成的生态越来越完善,工具也有很多,开源的或商业的.如: 最最流行的,也是使用最多的 Jenkins 有着持续集成DNA的ThoughtWorks GO.理念:"Deployment ...

  8. ethereumjs-vm/examples/run-transactions-simple

    https://github.com/ethereumjs/ethereumjs-vm/tree/master/examples/run-transactions-simple prerequisit ...

  9. python 文件及目录操作

    文件的基本操作 >>> import os #文件操作导入的模块 >>> import os.path >>> os.name #操作系统的类型, ...

  10. windows安装PHP IIS MYSQL

    https://www.cnblogs.com/huodong/p/4310425.html