【问题标题】:Converting curl to fetch将 curl 转换为 fetch
【发布时间】:2019-11-12 19:58:28
【问题描述】:

我可以成功地 curl 端点并获得 200 响应,但是当我使用 curl 获取转换器时,api 抱怨 body 参数。我对 api 没有任何控制权,所以我不确定那里发生了什么。

这是我成功的卷曲:

curl -v -X POST https://someurl -d 'param1=someValue' -d 'param2=somOtherValue'

使用https://kigiri.github.io/fetch/,建议在获取请求中使用以下正文:

"param1=someValue&param2=someOtherValue"

但是使用它会给我回应:

Param1 无效

你知道 fetch body 应该是什么样子才能让它像 curl 一样工作吗?

编辑:

将 fetch 转换回 curl 有助于理解差异。 所以,这行得通:

curl -v -X POST https://someurl -d 'param1=someValue' -d 'param2=someOtherValue'

但这不是:

curl -v -X POST https://someurl -d 'param1=someValue&param2=someOtherValue'

这个特定的 api 似乎就是这种情况,但我仍然无法更改 api,所以我想为第一个 curl 找到等效的 fetch body

【问题讨论】:

  • 也许尝试将参数添加到 URL:https://someurl? param1=someValue&param2=someOtherValue,然后 POST 到该 URL
  • 当您将-d 'param1=someValue&param2=someOtherValue' 提供给CURL 时,它将发送someValue&param2=someOtherValue 作为param1 的值。要使用 curl 发送多个参数,您需要为每个参数指定一个单独的 -d 选项。这就是-d 'param1=someValue' -d 'param2=someOtherValue' 有效而-d 'param1=someValue&param2=someOtherValue' 无效的原因。
  • @sideshowbarker:好的,那么我该如何在 javascript 抓取中做到这一点?当使用 curl 获取转换器然后再次将其转换回 curl 时,我最终得到了错误的 curl。那么 fetch 主体应该是什么样子的呢?
  • fetch("https://someurl?param1=someValue&param2=someOtherValue", {method: "POST"}) 就是它的样子。没有请求正文,也不需要额外的请求标头。
  • @sideshowbarker: -d 不是表示要在post body中发送吗?

标签: javascript curl fetch


【解决方案1】:

您可以使用this 将 curl 转换为 fetch:

fetch("https://someurl", {
  body: "param1=someValue&m2=somOtherValue",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded"
  },
  method: "POST"
})

工作sn-p

fetch("https://my-json-server.typicode.com/typicode/demo/posts", {
  body: "param1=someValue&m2=somOtherValue",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded"
  },
  method: "POST"
}).then(res => console.log(res));

【讨论】:

  • 查看问题。这正是我使用的,但是当我尝试使用您发布的建议提取结构时,api 抱怨其中一个参数,正如我在问题中所写的那样
  • 好的,所以问题与 api 如何处理请求有关,因为建议的解决方案适用于模拟 api
  • 这是正确答案。联系他们的支持后发现服务器端出现错误
【解决方案2】:

我使用postman client在语言之间转换api请求。

  1. 导入 -> 原始文本(在此处粘贴您的 curl 命令)

  1. 代码 -> 选择您的语言

【讨论】:

    【解决方案3】:

    虽然接受的答案已经很好了,

    但也许你也可以使用这个好帮手来直接转换

    https://kigiri.github.io/fetch/

    它在翻译标题和类似内容方面效果很好

    【讨论】:

      猜你喜欢
      • 2016-10-24
      • 2021-08-22
      • 1970-01-01
      • 2017-06-05
      • 2021-05-22
      • 1970-01-01
      • 2016-01-08
      • 2018-03-28
      • 2021-03-27
      相关资源
      最近更新 更多