我正在嘗試調試一個非常不尋常的錯誤,我正在爲一個簡單的REST庫I wrote收到。當連續發出多個請求時,Golang http請求會導致EOF錯誤
我使用標準的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", 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
請出示完整的代碼。 – Volker
從'錯誤:發佈https://go-firebase-test.firebaseio.com/.json:EOF'這一行看起來應該有'.json'之前的文件名。如果'.json'不是web-root中的有效文件名,它將立即返回一個'EOF'。檢查創建URL字符串的函數。我認爲這將是問題 – Intermernet
感謝您的評論,我會給你一個鏡頭。 – chourobin