请教一个关于 GO 的 HTTP 读取、发送问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
wyds591101
V2EX    Go 编程语言

请教一个关于 GO 的 HTTP 读取、发送问题

  •  
  •   wyds591101 2020-03-05 10:18:56 +08:00 2810 次点击
    这是一个创建于 2053 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    import requests s = requests.session() r = s.get("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 也过不了,求各位大神指导。 感谢、感谢、感谢!!!

    第 1 条附言    2020-03-05 11:01:54 +08:00

    第一次 第一次 各位大佬幽默 马上来代码:

     remote_res, err := http.Get("static/img/[email protected]") r.Method = http.MethodPost r.COntentLength= remote_res.ContentLength r.Body = remote_res.Body request := &http.Request{ Method: r.Method, URL: u, // 不相关 Proto: r.Proto,// 不相关 ProtoMajor: r.ProtoMajor,// 不相关 ProtoMinor: r.ProtoMinor,// 不相关 Header: r.Header, Body: r.Body, Host: r.Host,// 不相关 ContentLength: r.ContentLength, } resp, doErr := util.Do(request) 

    解释下:

    1. 我从远程获取了媒体数据
    2. 我把返回的body里面的一些数据放到请求里面了。
    3. 然后我去请求

    报错: multipart: NextPart: EOF

    15 条回复    2020-03-06 09:03:11 +08:00
    lcj2class
        1
    lcj2class  
       2020-03-05 10:48:56 +08:00
    where is your go code?
    dracher
        2
    dracher  
       2020-03-05 10:53:51 +08:00
    为什么贴了一段可以实现的 code, 但是有问题确不发上来.....
    你这不是求大神...是在求大仙吧....
    Yoock
        3
    Yoock  
       2020-03-05 10:59:08 +08:00 via iPhone
    SHOW ME YOUR CODE
    wyds591101
        4
    wyds591101  
    OP
       2020-03-05 11:05:29 +08:00
    @lcj2class 代码以上,截取了部分主要的代码,其他的写的乱七八糟的没贴。
    @lcj2class
    wyds591101
        5
    wyds591101  
    OP
       2020-03-05 11:05:38 +08:00
    @dracher 代码以上,截取了部分主要的代码,其他的写的乱七八糟的没贴。
    wyds591101
        6
    wyds591101  
    OP
       2020-03-05 11:06:11 +08:00
    @Yoock 我的代码来了,跟上面两位一样,就截取了部分代码。
    Yoock
        7
    Yoock  
       2020-03-05 12:29:30 +08:00 via iPhone
    Body 不能复用的,Copy 一下
    wentaoliang
        8
    wentaoliang  
       2020-03-05 12:50:27 +08:00
    楼上+1,
    lcj2class
        9
    lcj2class  
       2020-03-05 17:25:29 +08:00
    body 倒是可以复用,把 ContentLength 设为 0,以 chunked 形式发送试试
    lcj2class
        10
    lcj2class  
       2020-03-05 17:55:50 +08:00   1
    https://gitee.com/liujiacai/codes/1jqe0f38lkupird7xmang78/widget
    写的一个测试示例,楼主可以参考下
    wyds591101
        11
    wyds591101  
    OP
       2020-03-05 19:38:30 +08:00
    @lcj2class 我之前也是这么写的,我也按照示例写了,但是由于我的后端有可能跟您的不一样,所以我的报`request Content-Type isn't multipart/form-data`的错误,我在研究下,谢谢。
    wyds591101
        12
    wyds591101  
    OP
       2020-03-05 19:38:51 +08:00
    @Yoock 我使用 copy 下试试,感谢。
    Yoock
        13
    Yoock  
       2020-03-05 20:57:17 +08:00
    我试了 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 库
    wyds591101
        14
    wyds591101  
    OP
       2020-03-06 09:00:14 +08:00
    @Yoock 嗯嗯,10 楼的代码我也试了,可以的,我去手动构造下 form 试试,感谢。
    wyds591101
        15
    wyds591101  
    OP
       2020-03-06 09:03:11 +08:00
    @Yoock 因为我搜了好多构造 form 的都是通过 io 读取文件弄的,所以我一直没弄好,一直没拼对。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2596 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 12:30 PVG 20:30 LAX 05:30 JFK 08:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86