gpt4 book ai didi

go - 使用 http.Client 和 http.Transport 为请求设置 header

转载 作者:IT王子 更新时间:2023-10-29 00:52:28 25 4
gpt4 key购买 nike

我有不止一个ip可以上网。我正在请求选择界面。这种情况下应该怎么设置header呢?

tcpAddr := &net.TCPAddr{
IP: addrs[3].(*net.IPNet).IP, // Choosing ip address number 3
}
d := net.Dialer{LocalAddr: tcpAddr}
conn, err2 := d.Dial("tcp", "www.whatismyip.com:80")
if err2 != nil {
log.Fatal(err2)
}

defer conn.Close()

transport := &http.Transport{
Proxy: http.ProxyFromEnvironment,
Dial: (&net.Dialer{LocalAddr: tcpAddr}).Dial,
TLSHandshakeTimeout: 10 * time.Second,
}

client := &http.Client{
Transport: transport,
}

response, err := client.Get("https://www.whatismyip.com/")

通常标题设置在这个way :

req.Header.Set("name", "value")

但不知道如何将它们设置为我的代码。

我想它们必须在 http.Transporthttp.Client 中的某处设置。但具体如何呢?

我的完整代码:

package main

import (
"bytes"
"fmt"
"github.com/PuerkitoBio/goquery"
"io/ioutil"
"log"
"net"
"net/http"
"os"
"time"
)

func main() {
ief, err := net.InterfaceByName("eth0")
if err != nil {
log.Fatal(err)
}
addrs, err := ief.Addrs()
if err != nil {
log.Fatal(err)
}
tcpAddr := &net.TCPAddr{
IP: addrs[3].(*net.IPNet).IP, // Choosing ip address number 3
}
d := net.Dialer{LocalAddr: tcpAddr}
conn, err2 := d.Dial("tcp", "www.whatismyip.com:80")
if err2 != nil {
log.Fatal(err2)
}

defer conn.Close()

transport := &http.Transport{
Proxy: http.ProxyFromEnvironment,
Dial: (&net.Dialer{LocalAddr: tcpAddr}).Dial,
TLSHandshakeTimeout: 10 * time.Second,
}

client := &http.Client{
Transport: transport,
}

response, err := client.Get("https://www.whatismyip.com/")

if err != nil {
fmt.Printf("%s", err)
os.Exit(1)
} else {
defer response.Body.Close()
contents, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Printf("%s", err)
os.Exit(1)
}
var contentsStr = string(contents)
fmt.Printf("%s\n", contentsStr)
var doc = DocByHtmlString(contentsStr)

doc.Find("div").Each(func(i int, s *goquery.Selection) {
attr, exists := s.Attr("class")
if exists {
if attr == "ip" {
fmt.Println(s.Text())
}
}
})
}
}

func DocByHtmlString(html string) *goquery.Document {
doc, err := goquery.NewDocumentFromReader(bytes.NewBufferString(html))
if err != nil {
panic(err)
}
return doc
}

最佳答案

创建请求:

 req, err := http.NewRequest("GET", "https://www.whatismyip.com/", nil)
if err != nil {
// handle error
}

设置标题:

 req.Header.Set("name", "value")

使用问题中配置的 client 运行请求:

 resp, err := client.Do(req)
if err != nil {
// handle error
}

按照问题中所示处理响应。

关于go - 使用 http.Client 和 http.Transport 为请求设置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32540219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com