Golang Go语言中的HTTP读取、发送问题请教
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
where is your go code?
更多关于Golang Go语言中的HTTP读取、发送问题请教的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
为什么贴了一段可以实现的 code, 但是有问题确不发上来…
你这不是求大神…是在求大仙吧…
SHOW ME YOUR CODE
代码以上,截取了部分主要的代码,其他的写的乱七八糟的没贴。
代码以上,截取了部分主要的代码,其他的写的乱七八糟的没贴。
我的代码来了,跟上面两位一样,就截取了部分代码。
Body 不能复用的,Copy 一下
楼上+1,
body 倒是可以复用,把 ContentLength 设为 0,以 chunked 形式发送试试
https://gitee.com/liujiacai/codes/1jqe0f38lkupird7xmang78/widget
写的一个测试示例,楼主可以参考下
我之前也是这么写的,我也按照示例写了,但是由于我的后端有可能跟您的不一样,所以我的报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
包。以下是一些关键点,帮助你解决这些常见问题:
-
发送HTTP请求:
- 使用
http.NewRequest
创建请求对象。 - 使用
http.Client
的Do
方法发送请求。 - 示例代码:
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))
- 使用
-
读取HTTP响应:
- 确保在读取响应体后关闭
resp.Body
以释放资源。 - 使用
ioutil.ReadAll
或bufio.Reader
读取响应体。 - 注意处理可能的错误,如网络问题或服务器错误。
- 确保在读取响应体后关闭
-
处理错误:
- 检查每个可能返回错误的函数调用,并适当处理。
- 使用
log.Fatal
或自定义错误处理逻辑。
-
使用上下文(Context):
- 在创建请求时,可以添加上下文以控制请求的超时或取消。
- 示例:
req = req.WithContext(context.Background())
确保你理解HTTP协议的基本知识,以及Go语言中的错误处理机制,这将有助于你更有效地解决HTTP读取和发送问题。