簡體   English   中英

將CURL命令轉換為NPM請求調用

[英]Convert CURL command to NPM request call

我已經使用此處所示的規定的卷曲方法成功調用了Watson Speech-To-Text API。 我使用child_process節點模塊從節點腳本中調用Curl

我正在嘗試過渡到使用request模塊執行相同的網絡請求(獲取轉錄的json轉儲)。 我有一些麻煩撰寫在適當的HTTP請求中requests的條款。 到目前為止,我有:

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對我而言尚不清楚。

任何幫助將不勝感激。

由於所有請求都是流,因此可以使用pipe()任何類型的數據直接式傳輸到請求中。 從技術上講,您不需要添加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);
    }));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM