gpt4 book ai didi

go - GET请求返回403状态码(解析中)

转载 作者:行者123 更新时间:2023-12-02 11:25:11 25 4
gpt4 key购买 nike

我正在尝试获取 https://www.avito.ru/moskva 的正确正文状态为 200 的页面。

req, err := http.NewRequest("GET", "https://www.avito.ru/moskva", nil)
req.Header.Add("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0")
req.Header.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")

client := &http.Client{}
res, err := client.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()

fmt.Println(res.Status)
printBody(res) // prints body of page

输出:

403 Forbidden
"security stub from site (says that my ip banned)"

我可以在没有任何警告的情况下在浏览器中打开此页面。

我用python成功获取了body:

import requests

session = requests.Session()
session.headers = {
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0',
'Accept-Language': 'ru',
}
print(session.get("https://www.avito.ru/moskva").text)

即使不添加任何 header ,curl 也能正常工作:

curl https://www.avito.ru/moskva

最佳答案

问题似乎是使用的 TLS 版本,将最大版本设置为 1.2 tls.VersionTLS12 似乎有效:

package main

import (
"fmt"
"io/ioutil"
"net/http"
"crypto/tls"
)

func main() {
tr := &http.Transport{
TLSClientConfig: &tls.Config{
MaxVersion: tls.VersionTLS12,
},
}
client := &http.Client{Transport: tr}
req, err := http.NewRequest("GET", "https://www.avito.ru/moskva", nil)
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
}
body, err := ioutil.ReadAll(resp.Body)
bodyString := string(body)
fmt.Print(bodyString)
}

如果您切换到 tls.VersionTLS13,它会给出 403 状态代码,所以我猜该版本是默认为此主机协商的。在 Chrome 上,您可以看到它正在使用 tls1.3 :

enter image description here

但我不确定为什么它会为 tls1.3 和 tls1.2 返回不同的结果

关于go - GET请求返回403状态码(解析中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64272533/

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