如何将 * 任何 * cURL或节点获取请求转换为Axios请求?

rseugnpd  于 2022-11-05  发布在  iOS
关注(0)|答案(3)|浏览(311)

我希望能够从Chrome Developer Tools的Network选项卡复制任何HTTP请求,并将其作为Axios请求从node.js代码中重新发送。(我尝试过node-fetch,但发现Axios在几个重要方面更好)。然而,Chrome只有以下复制请求的选项:* 复制为Powershell,复制为fetch,复制为node.js fetch,复制为cURL(cmd),复制为cURL(bash)*。它不包括Axios选项。
我曾经遇到过几个可以转换cURL请求的在线工具:

  • https://curl.trillworks.com/〈==从cURL转换为 Ansible,浏览器(获取),Dart,Elixir,Go,JSON,Node.js(获取),Node.js(请求),MATLAB,PHP,Python,R,Rust或Strest 选项
  • https://onlinedevtools.in/curl〈==使用上述选项的子集从cURL进行转换:Go语言、JSON、Node.js、PHP、Python、R、Rust或Strest

但不幸的是,这两个都没有Axios的选项。我也没有能够找到一个npm包,将做转换。它需要可重复的,所以不知道什么是最好的选择,但它不能只是一个手动转换-感谢任何建议。

mwkjh3gx

mwkjh3gx1#

您可以使用postman,并且可以将cURL转换为多种语言。
1.导入cURL命令

1.打开请求

的代码面板
1.在这里您可以选择要转换的任意语言。

jc3wubiy

jc3wubiy2#

就像你说的:
需要找到一种方法来做到这一点,无论是npm包,Chrome扩展,在线工具,甚至手工制作的node.js代码
我已经用curlconverter做了一个代码(它甚至是一个链接后面的一个包,你用它作为例子),它可以帮助你。
它首先使用toJsonString方法将cURL字符串转换为JSON,然后进行大量“解析”,以生成漂亮且有用的Axios选项数组。

  • 网址
  • 检查方法
  • 标题
  • 曲奇饼
  • 数据(application/x-www-form-urlencodedmultipart/form-dataapplication/json)。

如果您需要其他东西,您可以使用代码作为基础,并根据您的需要进行更改。

const curlconverter = require('curlconverter');

function curlToAxios(curl){
  let parsedCurl = curlconverter.toJsonString(curl);
  parsedCurl = JSON.parse(parsedCurl)
  // For some reason, sometimes the URL returns with quotation marks at the beginning and the end
  const qm = ['%27', '\''];
  qm.forEach(element => {
    if (parsedCurl.raw_url.startsWith(element)) {
      // Removing last occurrence
      var pos = parsedCurl.raw_url.lastIndexOf(element);
      parsedCurl.raw_url = parsedCurl.raw_url.substring(0,pos) + parsedCurl.raw_url.substring(pos+element.length);
      // Removing first occurrence
      parsedCurl.raw_url = parsedCurl.raw_url.replace(element, '');
    }
  });
  let axiosObject;
  let axiosOptions = {
    url: parsedCurl.raw_url,
    method: parsedCurl.method,
  };
  if (parsedCurl.headers && Object.keys(parsedCurl.headers).length > 0) {
    axiosOptions.headers = parsedCurl.headers;
  }
  if (parsedCurl.cookies && Object.keys(parsedCurl.cookies).length > 0) {
    // Convert cookies to 'cookie1=a; cookie2=b;' format
    let cookies = '';
    Object.keys(parsedCurl.cookies).forEach(element => {
      cookies += encodeURI(element) + '=' + (parsedCurl.cookies[element] ? encodeURI(parsedCurl.cookies[element]) : '') + '; ';
    });
    if (!axiosOptions.headers) {
      axiosOptions.headers = {}
    }
    axiosOptions.headers.Cookie = cookies
  }
  if (parsedCurl.data && Object.keys(parsedCurl.data).length > 0) {
    let data;
    // Form data
    if(parsedCurl.headers && (parsedCurl.headers['Content-Type'].includes('application/x-www-form-urlencoded') || parsedCurl.headers['Content-Type'].includes('multipart/form-data')) ) {
      data = '';
      Object.keys(parsedCurl.data).forEach(element => {
        data += (data !== '' ? '&' : '') + encodeURI(element) + '=' + (parsedCurl.data[element] ? encodeURI(parsedCurl.data[element]) : '');
      });
    } else if(parsedCurl.headers && parsedCurl.headers['Content-Type'] === 'application/json') {
      // The data here is on first element key
      data = Object.keys(parsedCurl.data)[0]
      data = JSON.parse(data);
    }
    axiosOptions.data = data;
  }
  axiosObject = axios(axiosOptions);

  return axiosObject;
}

由于它返回一个Axios,因此您可以正常使用它:

let curl = "curl --request POST \
--url http://localhost:3000/api/v1/users/new \
--header 'Content-Type: application/json' \
--data '{\"email\": \"email@example.com\",\"password\": \"123456\"}'"

let result = curlToAxios(curl)

result
.then(function (response) {
  console.log(response);
})
.catch(function (error) {
  console.log(error);
})

相关问题