当连续多次发送请求时,Golang http请求会导致EOF错误
发布时间:2020-12-16 19:22:27 所属栏目:大数据 来源:网络整理
导读:我正在尝试调试一个非常不寻常的错误,我正在接收一个简单的REST库I wrote. 我正在使用标准的net / http包来获取,发布,放置,删除请求,但是当我连续进行多个请求时,我的测试偶尔会失败.我的测试看起来像这样: func TestGetObject(t *testing.T) { firebaseRoo
我正在尝试调试一个非常不寻常的错误,我正在接收一个简单的REST库I
wrote.
我正在使用标准的net / http包来获取,发布,放置,删除请求,但是当我连续进行多个请求时,我的测试偶尔会失败.我的测试看起来像这样: func TestGetObject(t *testing.T) { firebaseRoot := New(firebase_url) body,err := firebaseRoot.Get("1") if err != nil { t.Errorf("Error: %s",err) } t.Logf("%q",body) } func TestPushObject(t *testing.T) { firebaseRoot := New(firebase_url) msg := Message{"testing","1..2..3"} body,err := firebaseRoot.Push("/",msg) if err != nil { t.Errorf("Error: %s",body) } 我正在提出这样的要求: // Send HTTP Request,return data func (f *firebaseRoot) SendRequest(method string,path string,body io.Reader) ([]byte,error) { url := f.BuildURL(path) // create a request req,err := http.NewRequest(method,url,body) if err != nil { return nil,err } // send JSON to firebase resp,err := http.DefaultClient.Do(req) if err != nil { return nil,err } if resp.StatusCode != http.StatusOK { return nil,fmt.Errorf("Bad HTTP Response: %v",resp.Status) } defer resp.Body.Close() b,err := ioutil.ReadAll(resp.Body) if err != nil { return nil,err } return b,nil } 有时它有效,但大多数时候我会遇到1或2个故障: --- FAIL: TestGetObject (0.00 seconds) firebase_test.go:53: Error: Get https://go-firebase-test.firebaseio.com/1.json: EOF firebase_test.go:55: "" --- FAIL: TestPushObject (0.00 seconds) firebase_test.go:63: Error: Post https://go-firebase-test.firebaseio.com/.json: EOF firebase_test.go:65: "" FAIL exit status 1 FAIL github.com/chourobin/go.firebase 3.422s 当我发出超过1个请求时,会发生故障.如果我注释掉除PUT请求之外的所有内容,测试将一直通过.一旦我包括第二个测试,例如GET,一个或另一个失败(有时都通过). 任何帮助赞赏,谢谢! 链接到来源:http://github.com/chourobin/go.firebase
我要猜测你的代码没有问题.您的问题最可能的原因是因为服务器正在关闭连接.速率限制是一个可能的原因.
您的测试不应该依赖于非常脆弱而不是密封的外部服务.相反,您应该考虑在本地旋转测试服务器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |