zoukankan      html  css  js  c++  java
  • go 客户端的请求带有请求头和cookie值得请求

    • 基础概念

      • 请求:客户端访问服务端
      • 响应:服务端对客户端的应答
      • 示例图

    • 带有特殊请求头和cookie值得客户端请求方式

      • 使用:http.NewRequest,Do()组合。并且在创建请求的时候,带上cookie值和其他请求头
      • 参考代码
      package main
      
      import (
      	"bytes"
      	"encoding/json"
      	"fmt"
      	"io/ioutil"
      	"net/http"
      	"time"
      )
      
      var cookies []*http.Cookie
      var url = "XXXXX"
      
      // login
      func Login() {
      	req := ReqProto{}
      	data := make(map[string]string)
      	data["test"] = "11"
      	req.Data = data
      	logginClient := http.Client{}
      	logginJsonStr, err := json.Marshal(&req)
      	if err != nil {
      		err := fmt.Errorf("登录发起post请求时,json.Mashal错误:%v", err)
      		fmt.Println(err)
      		return
      	}
      	logginRequest, err := http.NewRequest("POST", url, bytes.NewBuffer(logginJsonStr))
      	if err != nil {
      		err := fmt.Errorf("登录发起post请求时,http.NewRequest错误:%v", err)
      		fmt.Println(err)
      		return
      	}
      
      	logginRequest.Header.Set("Content-Type", "application/json")
      	logginRequest.Header.Set("Content-Type", "application/x-www-form-urlencoded")
      	loginResponse, err := logginClient.Do(logginRequest)
      	if err != nil {
      		err := fmt.Errorf("登录发起post请求时,client.Do错误:%v", err)
      		fmt.Println(err)
      		return
      	}
      	fmt.Println(loginResponse)
      	if loginResponse.StatusCode != 200 {
      		err := fmt.Errorf("登录发起post请求时,response.StatusCode:%v", loginResponse.StatusCode)
      		fmt.Println(err)
      		return
      	} else {
      		data, err := ioutil.ReadAll(loginResponse.Body)
      		if err != nil {
      			fmt.Println(err)
      			return
      		}
      		var dataJSON interface{}
      		json.Unmarshal(data, &dataJSON)
      		fmt.Println(dataJSON)
      	}
      	fmt.Println("登录成功")
      	cookies = loginResponse.Cookies()
      }
      
      // StaticData
      func StaticData() {
      	client := http.Client{}
      	req, err := http.NewRequest("GET",url, nil)
      	if err != nil {
      		fmt.Println(err)
      		return
      	}
      	for i := 0; i < len(cookies); i++ {
      		req.AddCookie(cookies[i])
      	}
      	resp, err := client.Do(req)
      	if err != nil {
      		fmt.Println(err)
      		return
      	}
      	defer resp.Body.Close()
      	data, err := ioutil.ReadAll(resp.Body)
      	if err != nil {
      		fmt.Println(err)
      		return
      	}
      	fmt.Println(string(data))
      }
      
      func main() {
      	Login()
      	StaticData()
      }
      
      
  • 相关阅读:
    SystemV和BSD的区别
    Linux init 系列一 System V风格
    ps -ef和ps aux的区别
    Linux中/etc/resolv.conf文件简析
    Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stoc
    在Linux中利用Service命令添加系统服务及开机自启动
    实例具体解释Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(二)
    关于程序性能优化基础的一些个人总结
    C++开发人脸性别识别总结
    double型转换成string型
  • 原文地址:https://www.cnblogs.com/MyUniverse/p/11704639.html
Copyright © 2011-2022 走看看