gpt4 book ai didi

go - 在 Go 中请求多个 URL

转载 作者:IT王子 更新时间:2023-10-29 02:16:10 24 4
gpt4 key购买 nike

我有以下 Go 程序:https://play.golang.org/p/-TUtJ7DIhi

package main

import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"strconv"
)

func main() {
body, err := get("https://hacker-news.firebaseio.com/v0/topstories.json")

if err != nil {
panic(err)
}

var ids [500]int
if err = json.Unmarshal(body, &ids); err != nil {
panic(err)
}

var contents []byte
for _, value := range ids[0:10] {
body, err := get("https://hacker-news.firebaseio.com/v0/item/" + strconv.Itoa(value) + ".json")

if err != nil {
fmt.Println(err)
} else {
contents = append(contents, body...)
}
}

fmt.Println(contents)
}

func get(url string) ([]byte, error) {
res, err := http.Get(url)
if err != nil {
return nil, err
}

body, err := ioutil.ReadAll(res.Body)
res.Body.Close()

return body, err
}

运行时,它会在迭代获取请求时抛出 EOF json 错误,但当我单独点击 URL 时,它们似乎没有格式错误。

我错过了什么?

最佳答案

看起来他们的服务器出了点问题,它没有发送 Connection: close 就关闭了连接。 header 。因此,客户端会尝试根据 HTTP/1.1 规范重用连接。

您可以通过创建自己的请求并设置 Close = true 来解决此问题,或使用带有 DisableKeepAlives = true 的自定义传输

req, err := http.NewRequest("GET", url, nil)
if err != nil {
return nil, err
}
req.Close = true

res, err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}

关于go - 在 Go 中请求多个 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29417363/

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