Hello:
我使用 openresty 实现了一个正向代理 proxy 项目,使用 lua-resty-http 库来转发 http 请求。简单来说就是,client 调用我的 proxy,然后我再将 http 请求转发给指定域名。当然,在这个过程中,我还做了很多管理以及其它业务上的事情;
但是我发现,一般的http请求都能正常处理。但是碰到 "multipart/form-data; boundary=" 类型的时候就无法处理了。
举个例子:
我想调用 weixin api 上传一个图片,直接调用weixin api是:(图片是 test1.jpg)
curl -i -F media=@test1.jpg "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=19_ZBrZjR_TLoDbwdHLDG9MpMxFHIjNUzHxCO8Ty96AdWfjMNZHx6Wg1TenBQgODTmbKQhcWjAC7fPzywA0kZcIlyUMdbaTlvdXt79GdZh6-9nynSXWCuv4WEvL7YrZf-TMdtP2JKxeBEdxFse4XSNiAMDCXS&type=image"
通过我的代理调用方式:
curl -vv -i -F media=@test1.jpg -H "host: file.api.weixin.qq.com" "http://10.0.2.15/cgi-bin/media/upload?access_token=19_ZBrZjR_TLoDbwdHLDG9MpMxFHIjNUzHxCO8Ty96AdWfjMNZHx6Wg1TenBQgODTmbKQhcWjAC7fPzywA0kZcIlyUMdbaTlvdXt79GdZh6-9nynSXWCuv4WEvL7YrZf-TMdtP2JKxeBEdxFse4XSNiAMDCXS&type=image"
但是加日志却发现, 永远都是在 read_response 接口超时,不论我将read/send/connect的timeout设置为多大都一样;在调用 request 之前打印了 body,应该没问题是图片的二进制数据;抓包看了下,我的代理收到的客户端请求是没有问题的,图片的内容也正确读取;但是代理请求 file.api 的接口时,貌似没有图片的二进制数据;
====>下面是我的代理和 file.api.weixin.qq.com的TCP流:
POST /cgi-bin/media/upload?access_token=19_ZBrZjR_TLoDbwdHLDG9MpMxFHIjNUzHxCO8Ty96AdWfjMNZHx6Wg1TenBQgODTmbKQhcWjAC7fPzywA0kZcIlyUMdbaTlvdXt79GdZh6-9nynSXWCuv4WEvL7YrZf-TMdtP2JKxeBEdxFse4XSNiAMDCXS&type=image HTTP/1.1
host: file.api.weixin.qq.com
content-type: multipart/form-data; boundary=----------------------------867bb6796c4b
user-agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
accept: */*
content-length: 48068
yzc-redirection: 1
expect: 100-continue
请教一下,是我的使用姿势不对吗?还是我需要对上传文件进行特殊处理?或者有哪个其它的库支持我的这种需求?
谢谢。