【问题标题】:Convert CURL command to NPM request call将 CURL 命令转换为 NPM 请求调用
【发布时间】:2016-12-08 09:11:33
【问题描述】:

我已经使用here 所示的指定 curl 方法成功调用了 Watson Speech-To-Text API。我使用child_process 节点模块从我的节点脚本中调用Curl

我正在尝试过渡到使用 request 模块来执行相同的网络请求(获取转录的 json 转储)。在requests 的条款中,我在编写正确的http 请求时遇到了一些麻烦。到目前为止,我有:

request({
    url: 'https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?continuous=true&timestamps=true',

    method: 'POST',
    headers: {
   'Content-Type': 'audio/wav',
    'Transfer-Encoding':'chunked',
    'Authorization': 'Basic <usernameRedacted:passwordRedacted>'
    },
    body: {
    '--data-binary': audioFileName
  }
}, function(error, response, body){
    if(error) {
        console.log(error);
    } else {
        console.log(response.statusCode, body);
    }
});

我收到throw new TypeError('first argument must be a string or Buffer'); 或有时(在正确修改请求调用后)收到 400 http 响应代码。因此,据我所知,Curl 只是一个运行相同底层 Post 请求的 Unix 进程,大概我应该能够完成这项工作。不幸的是,我似乎在这里遗漏了一些重要的修复。此外,关于身份验证以及如何将二进制数据(CURL 中的 --data-binary)加载到 POST 正文中,我不清楚 NPM requests README。

任何帮助都非常感谢提前。

【问题讨论】:

    标签: javascript node.js http curl npm


    【解决方案1】:

    您可以使用pipe()stream 任何类型的数据直接放入请求中,因为所有请求都是流。从技术上讲,您不需要添加 Content-Type 标头,因为 request 将根据管道输入的文件扩展名来计算它,但是,如果您明确传递它, request 将使用您设置的一个而不是自动确定它。

    同样对于身份验证,请求将采用带有用户名和密码的auth 选项以及其他一些选项。请参阅request HTTP Auth Docs,了解如何使其工作的具体信息。

    我提供了一个示例,说明如何将数据传送到请求以及如何使用 HTTP Basic Auth 执行请求

    const request = require('request');
    const fs = require('fs');
    
    fs.createReadStream(audioFileName)
        .pipe(request({
            uri: 'https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?continuous=true&timestamps=true',
            method: 'POST',
            auth: {
                user: '',
                pass: ''
            },
            headers: {
                'Content-Type': 'audio/wav',
                'Transfer-Encoding': 'chunked'
            }
        }, (err, res, body) => {
            if (err)
                console.log(err);
            else
                console.log(body);
        }));
    

    【讨论】:

    • 做到了!我不认为我自己会很快想出用“fs”链接流。谢谢。
    猜你喜欢
    • 2016-05-20
    • 2016-08-04
    • 2018-10-21
    • 2017-05-25
    • 2018-09-27
    • 2020-08-15
    • 1970-01-01
    • 2014-04-12
    • 2021-04-28
    相关资源
    最近更新 更多