如何将这个Curl调用转换为JavaScript/React?

dsekswqp  于 4个月前  发布在  Java
关注(0)|答案(2)|浏览(54)

我有一个curl调用,看起来像这样:

curl \
-v \
-X POST \
-k \
-H 'Content-Type: application/json' \
-d '{
    "mydata": "XXXXX"
}' \
"https://localhost:11000/myEndpoint"

字符串
它工作了。我得到了一个200的响应。但是当我删除-k标志时,它失败了,并出现以下错误:
curl:(60)SSL证书问题:自签名证书
所以我知道-k标志是必需的。
现在我尝试将这个curl转换为JavaScript/React。但是当我在React中这样做时,它失败了:

const response = await fetch(
  'https://localhost:11000/myEndpoint',
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ mydata: 'XXXXX' })
  },
)


下面是浏览器控制台中的错误:
POST https://localhost:11000/myEndpointnet::ERR_CERT_错误_无效
我相信这个错误是因为JavaScript/React没有做相当于-k的事情。我如何让它模仿Curl的-k行为?

xdnvmnnf

xdnvmnnf1#

没有办法让fetch()(或XHR或任何其他)调用直接执行-k(也称为**--insecure**)所做的事情。
您需要告诉您的浏览器信任该自签名证书。
一般来说,你可以通过导航到https://localhost:11000/并接受可能出现的“是的,我知道我在做什么,我知道这是不安全的”提示来为单个会话做到这一点。
对于更持久的解决方案,您可以在网络上搜索,例如“信任自签名证书您的浏览器在这里”.

csbfibhn

csbfibhn2#

AKX的React是正确的。有一个类似的问题,我相信所描述的方式是有效的Chrome。对于火狐你必须trust the certificate through the browser
也就是说,你基本上可以使用axios而不是fetch和pass作为选项:

httpsAgent: new https.Agent({rejectUnauthorized: false})

字符串
但是,如果你使用的是webpack > 5,这将不起作用(将在控制台中打印为错误)。要使其在dev环境中工作,你应该执行以下操作:

  • 安装包https,https-browserify,stream-http,并将它们作为polyfills包含在webpack.js.js中:
resolve: { 
     fallback: {
         "https": require.resolve("https-browserify"),
          "http": require.resolve("stream-http")
     }
 }

  • npm install:buffer,url
  • 运行该项目,并应工作

关于为什么在prod中应该始终避免这种方法的原因(有时可能在dev中也是如此),请在这里查看第一个答案:How to configure axios to use SSL certificate?

相关问题