当前位置:首页 > 服务端 > go http.Get请求 http.Post请求 http.PostForm请求 Client 超时设置

go http.Get请求 http.Post请求 http.PostForm请求 Client 超时设置

2022年09月17日 10:36:55服务端4

http中有Get/Post/PostForm方法

也可以通过http包中设置client 请求配置 ,然后通过client.Do方法实现请求

下demo中功能都实现,其中有详细说明:

package main

import (
    "log"
    "net/http"    //http 请求用
    "io"    // io.Copy获取http请求状态用;HttpPost
    "os"    // os.Stdout 取io.Copy 返回数据中的status;HttpPost用
    "io/ioutil"    //处理http获取的数据转换用
    "strings"    //HttpPost2中生成Post数据用
    "net/url"    //HttpPost3中定义url.Values中使用到
    "time"        //设置超时用
    "net"
)
var my_url = "http://c-dancer.com"  //全局变量链接
func main(){
    //HttpGet()
    HttpPost()
    //HttpPost2()
    //HttpPost3()

}

//net/http包中提供了Get/Head/Post/PostForm函数来发出http/https请求
//通过get获取来http请求
func HttpGet(){
    response,err := http.Get(my_url)
    if err!= nil {        //如果访问不成功,url不存在则会进入改判断
        log.Println(err)
        return
    }
    defer response.Body.Close()    //请求完了关闭回复主体
    body,err := ioutil.ReadAll(response.Body)
    log.Println(string(body))
}

//生成client 通过client的Do方法执行
func HttpPost(){
    /*     生成client,参数默认;
    *    这个结构体有四个属性
    *    Transport(RoundTrepper);指定执行的独立、单次http请求的机制
    *    CheckRedirect(func(req *Request, via []*Request)err):指定处理重定向的策略,如果不为nil,客户端在执行重定向之前调用本函数字段.如果CheckRedirect 返回一个错误,本类型中的get方法不会发送请求,如果CheckRedirect为nil,就会采用默认策略:连续请求10次后停止;
    *    jar(CookieJar):jar指定cookie管理器,若果为nil请求中不会发送cookie,回复中的cookie会被忽略
    *    TimeOut(time.Duration):指定本类型请求的时间限制,为0表示不设置超时
    */
    //client := &http.Client{}    这里初始化了一个默认的client,并没有配置一些请求的设置

    //可以通过client中transport的Dail函数,在自定义Dail函数里面设置建立连接超时时长和发送接受数据超时
    client := &http.Client{
        Transport: &http.Transport{
            Dial: func(netw, addr string) (net.Conn, error) {
                conn, err := net.DialTimeout(netw, addr, time.Second*2)    //设置建立连接超时
                if err != nil {
                    return nil, err
                }
                conn.SetDeadline(time.Now().Add(time.Second * 2))    //设置发送接受数据超时
                return conn, nil
            },
            ResponseHeaderTimeout: time.Second * 2,
        },
    }
    reqest,err := http.NewRequest("POST",my_url,strings.NewReader("name=PostName"))    //提交请求;用指定的方法,网址,可选的主体放回一个新的*Request
    reqest.Header.Set("Content-Type","application/x-www-form-urlencoded")
    if err != nil {
        panic(err)
        return
    }
    response,err := client.Do(reqest)    //前面预处理一些参数,状态,Do执行发送;处理返回结果;Do:发送请求,
    defer response.Body.Close()
    stdout := os.Stdout            //将结果定位到标准输出,也可以直接打印出来,或定位到其他地方进行相应处理
    _,err = io.Copy(stdout,response.Body)    //将第二个参数拷贝到第一个参数,直到第二参数到达EOF或发生错误,返回拷贝的字节喝遇到的第一个错误.
    status := response.StatusCode        //获取返回状态码,正常是200
    body,err := ioutil.ReadAll(response.Body)
    log.Println(string(body))
    log.Println(status)

}

//HTTP 包中POST 方法
func HttpPost2(){
    //HTTP POST请求
    req,err := http.Post(my_url,"application/x-www-form-urlencoded",strings.NewReader("name=myname"))//这里定义链接和post的数据
    if err != nil {
        log.Println(err.Error())
        return
    }
    defer req.Body.Close()
    body,err := ioutil.ReadAll(req.Body)
    if err != nil {
        log.Println(err.Error())
        return
    }
    log.Println(string(body))
}

//使用HTTP包中PostForm方法;
func HttpPost3(){
    req,err := http.PostForm(my_url,url.Values{"key":{"value"},"id":{"123"}})
    if err != nil {
        log.Println(err.Error())
        return
    }
    defer req.Body.Close()
    body,err := ioutil.ReadAll(req.Body)
    if err != nil {
        log.Println(err.Error())
    }
    log.Println(string(body))
}

 

作者:jackylee92
来源链接:https://www.cnblogs.com/jackylee92/p/6214591.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/42451.html

标签: HTTP
分享给朋友:

“go http.Get请求 http.Post请求 http.PostForm请求 Client 超时设置” 的相关文章

对称与非对称加密;SSL;HTTPS;AJP

1.对称加密就是加密与解密的时候都是用一个密码 2.非对称加密,有一对密码A,B;用A加密就得用B解密,相对的用B加密就得用A解密 3.公钥与私钥,这一对密码,随便拿一个公布出去,那个就是公钥,剩下一个是私钥。 4.应用1:我想给一个人发信息,我就去拿他公布出来的公钥...

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

项目ITP(四) javaweb http json 交互 in action (服务端 spring 手机端 提供各种工具类)勿喷!

前言   系列文章:[传送门]   洗了个澡,准备写篇博客。然后看书了。时间 3 7 分。我慢慢规律生活,向目标靠近。                       &n...

git clone使用https

git clone使用https

git默认开启SSL验证, 如果直接使用git clone https://xxx, 会返回SSL certificate problem: unable to get local issuer certificate, 需要把SSL验证关闭,...

Maven的HTTP代理设置

Maven的HTTP代理设置

http://blog.sina.com.cn/s/blog_4f925fc30102ed3y.html   第一、检测本地网络是否不能直接访问Maven的远程仓库,命令为ping repo1....

基于HttpRunner,解析swagger数据,快速生成接口测试框架

基于HttpRunner,解析swagger数据,快速生成接口测试框架

  使用 HttpRunner 默认生成的项目是这样的   命令:httprunner --startproject  项目名称    so,根据这个项目的目录结构,使用python解析swagger接口参数,可以...

java项目常用工具类之http请求工具类

jdk1.8+spring4.3.12 一、问题描述及试用场景: 在项目开发中,经常用调用http接口,下面是封装apache的httpclient工具类。 二、样例代码: package org.egg.utils; im...

HTTP Session、Cookie机制详解

一、什么是http session,有什么用 HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息。  这 里用一个形象的比喻来解释session的工作方式。假设We...

【jvm】如何为JVM设置HTTP代理

【jvm】如何为JVM设置HTTP代理

How do I set the proxy to be used by the JVM?   -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=1080 -Dhttps.proxyHost=127.0.0....

python实现的json数据以HTTP GET,POST,PUT,DELETE方式页面请求

转自 http://blog.chinaunix.net/uid-26000296-id-4394470.html 一、JSON简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。...

http 请求code状态码

  状态码 含义 100 客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。