如果存在连接/代理错误,我正在尝试重试请求。由于某些原因,我不断收到此错误,无论尝试重试该请求,该错误似乎都无法恢复:
Post https://m.somewebsite.co.uk/api/di/34433: http: ContentLength=222 with Body length 0
难道我做错了什么?我的第一个怀疑是http.Request以某种方式被消耗了,因此在下一次尝试中它不再是好东西。我应该管理副本吗?
func Post(URL string, form url.Values, cl *http.Client) ([]byte, error) {
req, err := http.NewRequest("POST", URL, strings.NewReader(form.Encode()))
if err != nil {
log.Error(err)
return nil, err
}
req.Header.Set("User-Agent", ua)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
rsp, err := do(cl, req)
if err != nil {
return nil, err
}
defer rsp.Body.Close()
b, err := ioutil.ReadAll(rsp.Body)
if err != nil {
log.Error(err)
return nil, err
}
return b, nil
}
func do(cl *http.Client, req *http.Request)(*http.Response, error){
rsp, err := cl.Do(req)
for i := 0; IsErrProxy(err); i++ {
log.Errorf("Proxy is slow or down ")
time.Sleep(6 * time.Second)
5t rsp, err = cl.Do(&ncp)
if err == nil{
return rsp, nil
}
if i > 10 {
return nil, fmt.Errorf("after %v tries error: %v", i, err)
}
}
return rsp, err
}
问题在于在第一次调用Do()时将请求主体读到末尾。在随后对Do()的调用中,没有从响应主体读取任何数据。
解决方法是将主体阅读器的创建移到for循环内。这要求在for循环内也创建请求。
func Post(URL string, form url.Values, cl *http.Client) ([]byte, error) {
body := form.Encode()
for i := 0; i < 10; i++ {
req, err := http.NewRequest("POST", URL, strings.NewReader(body))
if err != nil {
log.Error(err)
return nil, err
}
req.Header.Set("User-Agent", ua)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
rsp, err := cl.Do(req)
if err == nil {
defer rsp.Body.Close()
b, err := ioutil.ReadAll(rsp.Body)
if err != nil {
log.Error(err)
return nil, err
}
return b, nil
}
if !IsErrorProxy(err) {
return nil, err
}
log.Errorf("Proxy is slow or down ")
time.Sleep(6 * time.Second)
}
return nil, fmt.Errorf("after 10 tries error: %v", err)
}
我正在开发一个服务,它将使用HTTP Content-Type:application/octet-stream和Transfer-Encoding: chunked接收文件。 我能够让服务器获取请求DisableFormValueModelBinda和Request estSizeLimit。 但是当我去从Request.Body获取数据时,长度总是0。 在框架中,我将使用类似request.C
大家好,我正在构建一个聊天服务器,我在屏幕上使用一个文本字段来键入用户写的聊天消息,这个想法是,当他键入消息时,它就像一个泡泡在一个人的头上一样工作。 我的问题是,为了不使文本框太大或太小,有没有一种方法可以使文本框调整大小(如果你愿意,可以修剪),以便它调整到文本字段中所写的文本? 附言。我使用JavaFx scenebuilder来完成所有这些。
下面的代码给出了最长的回文子序列长度。如何修改代码以获得最长的回文子串长度? 下面是一个示例调用:
问题内容: 我正在尝试将JSON参数发送到我的服务器,并使用json.Decoder解析它们。我读到您应该能够从request.Body属性获取查询参数。以下是我的服务器代码: 每次,我都会看到(当然是不同的时间戳记)。我的客户端AJAX调用如下: 发送内容的示例URL: 更好看一下参数: 我已经尝试了GET和POST请求。 为什么我的req.Body从不解码?如果我尝试单独打印req.Body,
有人能解释一下这个错误吗? 这是我的日志。
所以我在我的桌面应用程序中创建了一个文本限制功能,但我似乎无法让它在准确的位置停止退行距。 限制的作用是,当用户没有单击Submit按钮时,它将函数CheckSize()作为一个新线程运行。CheckSize()查看jTextArea的内容,它有长度条件。一旦满足溢出长度(256个字符),就调用enforceLimit()将插入符号放在文本区域的末尾,并退格符一个字符。 现在的问题是,在测试过程中