连续发出多个请求时,Golang http请求导致EOF错误

我正在尝试调试我写的一个简单REST库时遇到的非常异常的错误。

我使用标准的net / http包发出Get,Post,Put,Delete请求,但是当我连续发出多个请求时,我的测试有时会失败。我的测试看起来像这样:

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", err)

}

t.Logf("%q", 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

当我提出多个请求时,就会发生失败。如果我注释掉除PUT请求之外的所有内容,则测试将始终通过。一旦包含第二个测试(例如GET),一个或另一个将失败(有时都通过)。

任何帮助表示赞赏,并感谢!

链接到源:http :

//github.com/chourobin/go.firebase

回答:

我猜您的代码没有问题。造成问题的最可能原因是服务器正在关闭连接。速率限制是对此的一种可能原因。

您的测试不应依赖于非常脆弱且不封闭的外部服务。相反,您应该考虑在本地扩展测试服务器。

以上是 连续发出多个请求时,Golang http请求导致EOF错误 的全部内容, 来源链接: utcz.com/qa/436167.html

回到顶部