在 JavaScript Fetch API 中实现 curl 发布请求

Posted

技术标签:

【中文标题】在 JavaScript Fetch API 中实现 curl 发布请求【英文标题】:Implement curl post request in JavaScript Fetch API 【发布时间】:2020-11-11 19:43:59 【问题描述】:

我正在尝试在 JS Fetch API 中使用 curl 来实现这个发布请求:

curl --user apikey:my_secret_apikey --request POST --header "Content-Type: application/json" --data "\"text\":[\"Hello\"],\"model_id\":\"en-es\"" "my_secret_url/v3/translate?version=2018-05-01"

我在实现 API 密钥时遇到问题。

我试过这个,但它不起作用。我从服务器收到 401 未经授权的错误。

fetch(url, 
    method: "POST",
    headers:  'Content-Type': 'application/json' ,
    user: 
        "apikey": blablabla_api_key
    
    body: 
        "text": [term],
        "model_id": "en-hi"
    
).then(res ........

感谢任何帮助!

编辑:如果您对如何使用其他 HTTP 库将此发布请求实现为 JS 有任何其他建议,那也很有帮助!

带有授权头的编辑代码:

let headers = new Headers();

headers.append('Authorization', 'Basic ' + btoa("apikey" + ":" + "my_api_key"));
headers.append('Content-Type', 'application/json');
fetch(url, 
    method: "POST",
    headers: headers,
    body: 
        "text": ["Hello"],
        "model_id": "en-es"
    
).then(result => 
    console.log(result);
    resolve(result.translations[0].translation);
).catch(err => console.log(err));

这会导致 400 Bad Request 错误,即使 curl 请求工作正常。

【问题讨论】:

您不能只将 cURL 参数名称转换为 fetch 选项中的键,这不是它的工作原理。 fetch 不知道如何处理user。您需要为此 cURL 参数创建适当的 header,并在 fetch 调用中将其指定为 header。 如果这是 HTTP 基本身份验证 - ***.com/questions/43842793/… @CBroe 我实现了身份验证标头,它似乎已经奏效,但现在我收到来自服务器的 400“错误请求”错误 不确定您为 body 指定的 JS 对象是否会自动转换为 JSON,请尝试将其作为正确的 JSON 字符串提供。 @CBroe 感谢您的评论,我该怎么做? 【参考方案1】:

希望我回答你的问题还不算太晚。 我遇到了和你一样的问题,我的解决方案是将授权编码为base64。

https://observablehq.com/@mbostock/fetch-with-basic-auth#:~:text=To%20use%20basic%20authentication%20with,result%20in%20a%20401%20error.

我正在使用 Node.js,所以我需要使用 Buffer 进行编码过程。 如果我正确理解您的问题,您必须执行以下操作:

let buffer = Buffer.from(apikey:my_secret_apikey)
let base64data = buff.toString('base64')

然后您的授权标头应设置为如下所示:

headers: 'Authorization': `Basic $base64data`

这至少帮助我解决了我一直在努力解决的问题。希望它也适用于您!

【讨论】:

以上是关于在 JavaScript Fetch API 中实现 curl 发布请求的主要内容,如果未能解决你的问题,请参考以下文章

在 javascript 中使用 fetch 请求 API 存在 CORS 策略错误

在 JavaScript 中拦截 fetch() API 请求和响应

javascript JavaScript Fetch API

[Javascript] Fetch API

如何使用“Fetch API”在 javascript 和 c# 之间传递数据?

javascript 在Express.JS中的Node.JS中使用Fetch API