go中处理各种请求方式以及处理接口请求参数

话不多说直接上代码,解读内容全部在代码中

1、处理请求方式

package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
	"strings"
)

//这个文件是对于net/http包的解读

func httpGet() {
	//func Get(url string) (resp *Response, err error)
	resp, err := http.Get("http://localhost:5379/ParseForm?id=1&name=zhangsan")//这里直接调用了http里面的get函数,传入对应url即可 返回的是http包中的respoonse类型
	if err != nil {
		// handle error
	}

	defer resp.Body.Close() //一定要关闭返回的response中的body
	body, err := ioutil.ReadAll(resp.Body) //读取body中的信息
	if err != nil {
		// handle error
	}

	fmt.Println(string(body))
}

func httpPost() {
	//func Post(url string, bodyType string, body io.Reader) (resp *Response, err error)
	resp, err := http.Post("http://localhost:5379/FormValue",
		"application/x-www-form-urlencoded",
		strings.NewReader("name=cjb")) //这里的第二个参数是传入参数的类型,第三个参数固定类型为io.Reader类型,因此调用了strings包中的func NewReader(s string) *Reader 转化为io.Reader类型
	if err != nil {
		fmt.Println(err)
	}

	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		// handle error
	}

	fmt.Println(string(body))
}

func httpPostForm() {
	//func PostForm(url string, data url.Values) (resp *Response, err error)
	resp, err := http.PostForm("http://localhost:5379/hello",
		url.Values{"key": {"Value"}, "id": {"123"}}) //第二个参数规定的类型是url包中的Values类型 type Values map[string][]string

	if err != nil {
		// handle error
	}

	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		// handle error
	}

	fmt.Println(string(body))

}

//这里一般是处理复杂的请求,比如要设置请求头以及一些请求信息时调用
func httpDo() {

	client := &http.Client{} //实例化client结构体

	//func NewRequest(method, urlStr string, body io.Reader) (*Request, error) //第一个是请求方法,第二个是请求地址,第三个是请求的参数,这里依旧调用了string保重的对应方法转化为对应得数据类型
	req, err := http.NewRequest("POST", "http://localhost:5379/hello", strings.NewReader("name=cjb"))
	if err != nil {
		// handle error
	}

	//设置请求投信息
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
	req.Header.Set("Cookie", "name=anny")

	resp, err := client.Do(req)

	defer resp.Body.Close()

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		// handle error
	}

	fmt.Println(string(body))
}

func main() {
	httpGet()
	httpPost()
	// httpPostForm()
	// httpDo()
}

  2、处理接口请求参数

package main
import(
	"fmt"
	"net/http"
	"log"
	"io"
)

//这里是对解析接口请求参数进行解析
func ParseForm(w http.ResponseWriter,r *http.Request){
	//http包中的Request类型中有一个字段是Form这个字段只有调用了 ParseForm()函数才会起作用
	//Form这个字段的类型是url.Values  也就是这个type Values map[string][]string
	err:= r.ParseForm() //func (r *Request) ParseForm() error 这个函数将解析URL中的查询字符串,并将解析结果更新到r.Form字段
	if err!=nil{
		log.Fatal(err)
	}
	for i,v :=range r.Form{
		fmt.Fprintln(w,i,v)

	}
}

func FormValue(w http.ResponseWriter,r *http.Request){
	//func (r *Request) FormValue(key string) string 调用该函数获取指定参数的值
	name := r.FormValue("name")
	str := "name:" + name
	io.WriteString(w,str)
}

//这个是获取文件上传方式的参数值
//func (r *Request) FormFile(key string) (multipart.File, *multipart.FileHeader, error)
//FormFile返回以key为键查询r.MultipartForm字段得到结果中的第一个文件和它的信息。
//如果必要,本函数会隐式调用ParseMultipartForm和ParseForm。查询失败会返回ErrMissingFile错误

//这个是多文件上传时调用的
//func (r *Request) MultipartReader() (*multipart.Reader, error)
//如果请求是multipart/form-data POST请求,MultipartReader返回一个multipart.Reader接口,否则返回nil和一个错误。
//使用本函数代替ParseMultipartForm,可以将r.Body作为流处理。
func main(){
	http.HandleFunc("/ParseForm",ParseForm)
	http.HandleFunc("/FormValue",FormValue)
	http.ListenAndServe(":5379",nil)
}

  

原文地址:https://www.cnblogs.com/xhen/p/12012700.html

时间: 2024-07-31 22:31:18

go中处理各种请求方式以及处理接口请求参数的相关文章

对get post等http请求方式的理解

本文是关于get,post等几种请求方式的资料搜集和学习,HTTP,HTTP2协议的涉及点,然后提到了socket协议,RPC 先是和朋友的一些交流对话,问着问着就到了我的知识盲区.需要恶补一下这方面的知识了.朋友问:get 的请求方式 ,是不是只是单方面接受服务器发送的数据?我答:前半句和后半句,没关联吧?请求方式,所有的请求方式,都是能够接受数据的,就是格式啊,类型啊,方式啊 不一样朋友问:get 发送的都是啥玩意,服务器怎么知道我需要给传回什么东西呢我答:,,,你要发啥,对于Web来说,g

第五阶段:JAVAEE 和项目开发(第三课:HTTP的请求头和请求方式)

4. HTTP 协议之请求格式 请求格式的结构:请求行:请求方式.请求的地址和 HTTP 协议版本 请求头:消息报头,一般用来说明客户端要使用的一些附加信息 空行: 位于请求行和请求数据之间,空行是必须的. 请求数据:非必须. 注意: 一张网页的内容是极其丰富的,浏览器会遵循 HTTP 请求的格式将有效数据发送给服务器. 示例(get 请求方式): 示例(post 请求方式): 5. HTTP 协议之请求方式 根据 HTTP 标准,HTTP 请求可以使用多种请求方法. HTTP1.0 定义了三种

spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式

spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式 在类名,接口头上注解使用在 @JsonIgnoreProperties(value={"comid"}) //希望动态过滤掉的属性 例 @JsonIgnoreProperties(value={"comid"}) public interface 接口名称{ } @JsonIgnoreProperties(value={"comid"}) public class 类名{

C# ContentType: "application/json" 请求方式传json参数问题

处理Http请求时遇到的ContentType为application/json方式,记录下这种Post请求方式下如何传json参数: var request = (HttpWebRequest)WebRequest.Create("http://url"); request.ContentType = "application/json"; request.Method = "POST"; using (var streamWriter = n

iOS-GET请求详细操作-GET设置请求头

难得一次备注相当详细的原生GET网络请求操作,强迫症一样记录下来和大家分享- 也备复制用 -(void)getResult{ _MB = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES]; //接口路径 NSString *path = @"http://a.apix.cn/apixlife/phone/phone"; //路径-+参数 NSString *pathWithPhoneNu

HTTP深入浅出之http请求和15中以上的请求方式

HTTP的介绍及其通信机制 HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则.计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HT

jQuery中ajax的4种常用请求方式

jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息.详细参数选项见下. 如果你指定了 dataType 选项,请确保服务器返回正确的 MIME 信息,(如 xml 返回 "text/xml"). 实例: 保存数据到服务器,成功时显示信息. $.ajax({ type: "post", dataType: "

转:Ajax中的get和post两种请求方式的异同

1. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址.用户看不到这个过程. 2. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据.两种方式的参数都可以用Request来获得. 3.get传送的数据量

Ajax中的get和post两种请求方式的异同

Ajax中我们经常用到get和post请求.那么什么时候用get请求,什么时候用post方式请求呢? 在做回答前我们首先要了解get和post的区别.   1. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址.用户看不到这个过程.   2. 对于get方式,服务器端用Request.QueryS