发出GET请求并获取节点stream
我试图发送formData
,一个来自我使用请求的图像stream
问题是请求在formData
请求后formData
。 有什么办法可以pipe理图像请求识别? 但可以自由地将参数添加到formData
?
例如:
var req = request({ method: 'POST', url: 'http://www.foo.bar/api/v1/tag/recognize', formData: { image_file: request('http://visual-recognition-demo.mybluemix.net/images/horses.jpg'), param2: 'value2' }, json: true, });
我如何着火:
request('http://visual-recognition-demo.mybluemix.net/images/horses.jpg')
所以这个响应可以在req
更新:似乎在Content-Length
头缺less
http://visual-recognition-demo.mybluemix.net/images/horses.jpg响应
你只能得到Transfer-Encoding: chunked
更多细节在这里
看看这部分的文档。 你所描述的基本上就是这个块
request.get('http://google.com/img.png').pipe(request.put('some_url'));
请注意文档
当这样做时,内容types和内容长度被保存在PUT头部中。
另请注意,如果不指定callback,请求将始终返回一个Stream。 如果您提供callback,则会尝试将响应转换为string。 使用encoding:null
来让它返回原始字节。
示例 –
request({ url: 'some_url', //your image encoding: null //returns resp.body as bytes }, callback..)
要将呼叫链接在一起(一个接一个地运行),可以嵌套callback或使用promise。 例如,在另一个请求完成后运行请求 –
var request = require('request'); //1st request('first_url', function (error, response, body) { if (!error && response.statusCode == 200) { //2nd request('other_url', function (error, response, body) { //process resp }); } });
或者甚至更好,将请求callback代码转换为Promises。 看到如蓝鸟承诺库如何做到这一点。
这里有一个蓝鸟的例子(然后使用迭代的方式工作)
var Promise = require("bluebird"); Promise.promisifyAll(require("request")); request.getAsync('some_url').then(function(resp) { request.getAsync('some_other_url').then(..processing code..); });