如何在bash curl命令中使用--data-binary with multi params

时间:2018-06-01 15:25:51

标签: bash curl

ORDER BY...

然后我将它转换为bash shell命令

SELECT 
    identityColumnName, 
    (CASE WHEN column001 IS NULL THEN 1 ELSE 0 END) +
    -- ...
    (CASE WHEN column200 IS NULL THEN 1 ELSE 0 END) AS NullCount
FROM
    myTable
ORDER BY 
    NullCount DESC

但是反应结果仍然不对

<?php
$post_data = array(
    'filename'=>new \CurlFile($uploadPath),
    'jsondata'=> json_encode($params,JSON_UNESCAPED_UNICODE)
$toPdfApi='https://example.com/convert2PDF'
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,$toPdfApi);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl,CURLOPT_BINARYTRANSFER,true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
        'multipart/form-data',
        'application/x-www-form-urlencoded'));
curl_setopt($curl, CURLOPT_POSTFIELDS,$post_data);
$result = curl_exec($curl);

有人可以帮忙吗?是我的隐蔽bash shell吗?

如果我使用以下命令[replace -data-binary to -F],我得到正确的状态,但是从PHP代码我知道我应该在bash curl中添加CURLOPT_BINARYTRANSFER,否则https://example.com/convert2PDF可以没有得到正确的帖子数据。

curl -i -X POST -H "Content-Type: multipart/form-data" -H "Content-Type: application/x-www-form-urlencoded" --data-binary  'filename=@/root/test.txt' --data-binary   'jsondata={"fileName":"test","id":"xxx","backlink":"https://example.com/hello"}' https://example.com/convert2PDF

我想让响应的状态为200,结果是成功的--data-binary模式,我该怎样做才能使用我的bash命令?

1 个答案:

答案 0 :(得分:2)

--data-binary的重点在于它是一大块字节。您只能发送一个,因为每个HTTP请求只有一个正文,并且只能有一个顶级内容类型。

你想要做的是构建一个多部分请求体,它有两个部分,一个包含文件数据,另一个包含键/值对。

要通过命令行发送包含某些元数据的文件,您可以执行以下操作:

curl -F'id=xxx' -F 'name=foo' -F'file=@test.txt;type=text/plain' http://example.com

这将发送一个多部分请求,其中PHP后端可以访问$ _POST中的元数据和来自$ _FILES的文件数据。

所需的确切方法取决于后端期望收到的内容,但您尚未公布。

例如,以下内容适用于--data-binary(根据您的问题),但参数和文件数据都将在后端以不同的方式访问。

curl --data-binary '@test.txt' 'http://example.com?id=xxx&name=foo'