net包 http - golang

 在上一篇文章中,主要学习了一下dial,主要用于一些tcp或者udp的socket连接。今天我们来看看net包中的http请求。

 在go中,主要给我们封装了4个基础请求让我们可以快速实现http请求,他们分别是:

 http.Get(url string)

 http.Head(url string)

 http.Post(url, contentType string, body io.Reader)

 http.PostFrom(url string, data url.Values)

然后让我们看看他们的关系:

从上图我们可以看出,他们最终都是把请求体通过NewRequest()处理,然后传入c.Do()处理返回。以http.Get为例代码为:

func Get(url string) (resp *Response, err error) {
	return DefaultClient.Get(url)
}


func (c *Client) Get(url string) (resp *Response, err error) {
	req, err := NewRequest("GET", url, nil)
	if err != nil {
		return nil, err
	}
	return c.Do(req)
}

其他几个请求大体和这个相似,只不过NewRequest()传入数据不同。具体大家可以自己查看一下源码。

由此可见,我们通过对NewRequest() 和 c.Do() 的调用就可以很简单的实现各种http请求。

下面我们看一下,各个请求的使用方法:

http.Get() 很简单我们只需要填入URL即可,代码如下

    resp, err := http.Get("http://www.e.com/demo?id=1")
    if err != nil {
        // handle error
    }
 
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        // handle error
    }

http.Post()  和 http.PostFrom 是一种请求,通过上图我们也可以看出postfrom是对post的进一步封装。我们看看如何postfrom是怎么调用post的:

func (c *Client) PostForm(url string, data url.Values) (resp *Response, err error) {
	return c.Post(url, "application/x-www-form-urlencoded", strings.NewReader(data.Encode()))
}

http.post()请求为:

    resp, err := http.Post("http://www.aa.com/demo/",
        "application/x-www-form-urlencoded",
        strings.NewReader("name=cjb"))
    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))

http.PostFrom()请求为:

resp, err := http.PostForm("http://www.01happy.com/demo/accept.php",
        url.Values{"key": {"Value"}, "id": {"123"}})
 
    if err != nil {
        // handle error
    }
 
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        // handle error
    }
 
    fmt.Println(string(body))

最后让我们看看如何用newrequest和c.do实现:

postValue := url.Values{
"email": {"xx@xx.com"},
"password": {"123456"},
}
 
postString := postValue.Encode()
 
req, err := http.NewRequest("POST","http://www.aa.com/demo", strings.NewReader(postString))
if err != nil {
// handle error
}
 
// 表单方式(必须)
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
//AJAX 方式请求
req.Header.Add("x-requested-with", "XMLHttpRequest")
 
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
// handle error
}
 
defer resp.Body.Close()
 
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
// handle error
}
 
fmt.Println(string(body))

 

 

本短信二次开发接口适用于WAVECOM、西门子、诺基亚、摩托罗拉等支持标准AT 指令的GSM 短信终端 使用方式: 将sms.dll 文件拷贝到系统安装目录中的system32 文件夹中,然后再根据以下接口函数说明和提供的例 程源码开发 接口函数: 1、Sms_Connection(Com_Port As Integer,Com_BaudRate As Integer, Mobile_Type As String) As Integer Sms_Connection 函数说明如下: 功能描述:用于初始化终端与串口的连接 Com_Port:串口号(0 为红外接口,1,2,3,...为串口) Com_BaudRate:波特率 Mobile_Type:返回终端型号 Sms_Connection:返回值(0:连接终端失败;1:连接终端成功) 2、Sms_Send(Sms_TelNum As String, Sms_Text As String) As Integer Sms_Send 函数说明如下: 功能描述:发送短信 Sms_TelNum:发送给的终端号码 Sms_Text:发送的短信内容 Sms_Send:返回值(0:发送短信失败;1:发送短信成功) 3、Sms_Receive(Sms_Type As String, Sms_Text As String) As Integer Sms_Receive 函数说明如下: 功能描述:接收指定类型的短信 Sms_Type:短信类型(0:未读短信;1:已读短信;2:待发短信;3:已发短信;4:全部短信) Sms_Text:返回指定类型的短信内容字符串(短信内容字符串说明:短信与短信之前用"|"符号 作为分隔符,每条短信中间的各字段用"#"符号作为分隔符) 4、Sms_Delete(ByVal Sms_Index As String) As Integer Sms_Delete 函数说明如下: 功能描述:删除指定的短信 Sms_Index:短信的索引号 5、Sms_AutoFlag()As Integer Sms_AutoFlag 函数说明如下: 功能描述:检测连接的终端是否支持自动收发短信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值