Golang Go语言中的HTTP读取、发送问题请教

发布于 1周前 作者 yibo5220 来自 Go语言

Golang Go语言中的HTTP读取、发送问题请教

我想从 get 远程图片,并 post 到指定的服务器上。 我通过 python 的代码可以实现,实现如下

import requests

s = requests.session()
r = s.get("https://www.v2ex.com/static/img/[email protected]")
print(r.content)

r1= s.post("http://localhost:8080/", files={
    'filename': (
        "123.png",
        r.content, 
        'image/png' #测试
    )
})
print(r1.status_code)

但是我用 go 的话,获取到 get 的 body 之后,一直 post 不上去,要不就是 io eof,要不就是提示 content-type,即使解决了 content-type 的问题,io eof 也过不了,求各位大神指导。 感谢、感谢、感谢!!!


更多关于Golang Go语言中的HTTP读取、发送问题请教的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

16 回复

where is your go code?

更多关于Golang Go语言中的HTTP读取、发送问题请教的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


为什么贴了一段可以实现的 code, 但是有问题确不发上来…
你这不是求大神…是在求大仙吧…

SHOW ME YOUR CODE

代码以上,截取了部分主要的代码,其他的写的乱七八糟的没贴。

代码以上,截取了部分主要的代码,其他的写的乱七八糟的没贴。

我的代码来了,跟上面两位一样,就截取了部分代码。

Body 不能复用的,Copy 一下

body 倒是可以复用,把 ContentLength 设为 0,以 chunked 形式发送试试

我之前也是这么写的,我也按照示例写了,但是由于我的后端有可能跟您的不一样,所以我的报request Content-Type isn't multipart/form-data的错误,我在研究下,谢谢。

我使用 copy 下试试,感谢。

我试了 10 楼的代码,是可以的。
你这个接口应该只支持 form 的方式上传文件,你可以要手动构造 form 请求。
https://golang.org/pkg/mime/multipart/
https://stackoverflow.com/questions/20205796/post-data-using-the-content-type-multipart-form-data
看一下 golang 的 multipart form 库

嗯嗯,10 楼的代码我也试了,可以的,我去手动构造下 form 试试,感谢。

因为我搜了好多构造 form 的都是通过 io 读取文件弄的,所以我一直没弄好,一直没拼对。

在Go语言中处理HTTP读取和发送问题,通常涉及使用标准库中的net/http包。以下是一些关键点,帮助你解决这些常见问题:

  1. 发送HTTP请求

    • 使用http.NewRequest创建请求对象。
    • 使用http.ClientDo方法发送请求。
    • 示例代码:
      req, err := http.NewRequest("GET", "http://example.com", nil)
      if err != nil {
          log.Fatal(err)
      }
      client := &http.Client{}
      resp, err := client.Do(req)
      if err != nil {
          log.Fatal(err)
      }
      defer resp.Body.Close()
      body, err := ioutil.ReadAll(resp.Body)
      if err != nil {
          log.Fatal(err)
      }
      fmt.Println(string(body))
      
  2. 读取HTTP响应

    • 确保在读取响应体后关闭resp.Body以释放资源。
    • 使用ioutil.ReadAllbufio.Reader读取响应体。
    • 注意处理可能的错误,如网络问题或服务器错误。
  3. 处理错误

    • 检查每个可能返回错误的函数调用,并适当处理。
    • 使用log.Fatal或自定义错误处理逻辑。
  4. 使用上下文(Context)

    • 在创建请求时,可以添加上下文以控制请求的超时或取消。
    • 示例:req = req.WithContext(context.Background())

确保你理解HTTP协议的基本知识,以及Go语言中的错误处理机制,这将有助于你更有效地解决HTTP读取和发送问题。

回到顶部