当前位置: 首页 > 面试题库 >

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

狄飞尘
2023-03-14
问题内容

我正在尝试调试我写的一个简单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


问题答案:

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

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



 类似资料:
  • 我想向soap请求发送XML,我使用python请求,如下所示: 当我发送请求时,我会发出以下请求: 我在这样的请求中进行: 我给出了一些错误,比如你不能发送这样的请求。 我意识到我必须发送带有此请求的证书才能获得成功响应 我有<代码>。cer和。crt文件发送,但我这样发送: 并得到以下错误: 更新: 我在PK中使用openssl x509-inform der。cer-输出PK。pem并尝试以

  • 我有一个jersey服务器的例子,它适用于XML,但不适用于JSON。 如果我将此xml请求作为发送到服务器,则一切正常, 作为) 我在utilities-online.info将其翻译为JSON,并将其作为发送到相同的URL,具有相同的参数,但收到错误“400错误请求” 环境: Tomcat 7 球衣2.17 我尝试过的: 将添加到init-参数 启用init-参数为 添加了依赖项//

  • 我正在使用实现一个联系人应用程序。现在,我正试图通过发送以下格式的put请求来更新联系人 我将XML作为字符串发送,作为请求的主体。这是我的xmlString(请求主体) 我写了下面的代码来发送更新联系人的PUT请求。 当我试图在中发送请求时,联系人更新成功。但是当我试图运行上面的程序时,我得到了 400错误请求错误 我不知道我哪里出错了。任何帮助都将不胜感激!

  • 这是在收到以db为单位的帖子列表后发送带有每个帖子链接数据的POST请求的代码。 在使用每个链接请求帖子后,从回复中提取playerCount并将其更新到每个帖子。 我在这段代码中使用Resttemplate,但有一个问题需要花费太长时间。 所以我想把这个代码改为一次发送一个请求,并在所有请求完成后更新每个帖子。 我怎样才能把这个代码转换成我想要的? 我将使用此代码作为计划任务。

  • 我有一个简单的java程序,它以并行线程向服务器发送10,000个HTTP请求。 我的服务器是一个amazon ec2实例,运行在ubuntu、apache Tomcat7、30G RAM、4个CPU上。

  • 我使用的是kartik\gridview,以前我的导出工作得很好,但现在当我尝试在gridview中导出任何格式(pdf、json、excel等)的数据时,我得到的是一个空白的pdf,用于json和excel。消息是一样的,我得到: 在过去的几周里,我运行了几次composer update,所以我不知道是哪个更新破坏了这一点。 我也尝试过创建一个新的yii2基本项目,也尝试过这个功能,它仍然不起