Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将此curl命令转换为JavaScript';来吧_Javascript_Curl_Fetch - Fatal编程技术网

如何将此curl命令转换为JavaScript';来吧

如何将此curl命令转换为JavaScript';来吧,javascript,curl,fetch,Javascript,Curl,Fetch,我有以下cURL命令: // original curl curl https://example.com \ -F "id=id" \ -F "secret=secret" 我认为可以用这个fetch表达式来表示: // fetch const body = new FormData(); body.append('id', 'id'); body.append('secret', 'secret'); return fetch('https

我有以下cURL命令:

// original curl
curl https://example.com \
  -F "id=id" \
  -F "secret=secret"
我认为可以用这个
fetch
表达式来表示:

// fetch
const body = new FormData();
body.append('id', 'id');
body.append('secret', 'secret');

return fetch('https://example.com', {
  method: 'POST',
  mode: 'no-cors',
  headers: {
    'Content-Type': 'multipart/form-data',
  },
  body,
})
然后,将提取请求复制为cURL将生成以下命令:

// generated curl
curl 'https://example.com' \
  -H 'content-type: multipart/form-data' \
  --data-raw $'------WebKitFormBoundaryH2Ve4S1AUbboJ21W\r\nContent-Disposition: form-data; name="id"\r\n\r\nid\r\n------WebKitFormBoundaryH2Ve4S1AUbboJ21W\r\nContent-Disposition: form-data; name="secret"\r\n\r\nsecret\r\n------WebKitFormBoundaryH2Ve4S1AUbboJ21W--\r\n' \
  --compressed
令我惊讶的是,当为端点和表单值使用实数据而不是占位符数据时,原始的curl请求可以工作,但生成的curl请求不能工作(fetch版本也不能)


有什么明显的东西我遗漏了吗?原始cURL命令和fetch expression/generated cURL命令之间有什么区别?

我相信您的目标如下

  • 您希望将下面的curl命令转换为Javascript的
    fetch

      curl https://example.com \
        -F "id=id" \
        -F "secret=secret"
    
在这种情况下,下面的脚本如何?使用
FormData
时,
Content-Type
通过包含边界自动添加到请求头中

示例脚本: 参考:
补充: 关于你下面的评论,

您知道如何将原始cURL命令转换为不使用-F选项的命令吗

在这种情况下,按照如下方式手动创建请求主体如何

curl -H 'Content-Type: multipart/form-data; boundary=boundaryboundary' \
  -d $'--boundaryboundary\r\nContent-Disposition: form-data; name="id"\r\n\r\nid\r\n--boundaryboundary\r\nContent-Disposition: form-data; name="secret"\r\n\r\nsecret\r\n--boundaryboundary--\r\n' \
  'https://example.com'

您的目标是正确的,省略
内容类型
标题是一个好主意,但不幸的是,fetch查询仍然与
curl
命令不同。注意,我确实需要在我的案例中使用
模式:“no cors”
在我的案例中,在获取示例中,
响应。ok
始终为false。但是当使用原始的
curl
命令时,我得到了一个有效的JSONresponse@Raphael谢谢你的回复。给您带来不便,我深表歉意。关于
模式:“无cors”
,我明白了。关于
,但不幸的是,fetch查询仍然与curl命令不同。
,不幸的是,我无法理解它。我为此道歉。那么,我可以问一下关于
仍然不同的
的细节吗?当我测试上面修改的脚本时,我可以确认它与curl是相同的。所以我想确认一下你目前的情况。例如,作为测试,对于上面修改的脚本,当您没有使用
模式:“no cors”
时,您将获得什么结果?@Raphael raftpanah感谢您的回复。从你的回答中,我可以理解你的处境。当我再次检查curl命令和修改后的Javascript时,我确认这两个请求是相同的。因此,我想确认是否还有其他情况。关于
将原始cURL命令转换为不使用-F选项的命令,在这种情况下,我认为可以手动创建请求主体。为此,我在回答中添加了示例curl命令。我认为区别在于
模式:“无cors”
导致
响应。状态
始终为
0
curl -H 'Content-Type: multipart/form-data; boundary=boundaryboundary' \
  -d $'--boundaryboundary\r\nContent-Disposition: form-data; name="id"\r\n\r\nid\r\n--boundaryboundary\r\nContent-Disposition: form-data; name="secret"\r\n\r\nsecret\r\n--boundaryboundary--\r\n' \
  'https://example.com'