【问题标题】:curl: per-file additional headers from CLI (for multipart POST, SOAP, etc.)curl:来自 CLI 的每个文件的附加标头(用于多部分 POST、SOAP 等)
【发布时间】:2017-06-28 06:01:54
【问题描述】:

我尝试添加 Content-ID: 和其他一些自定义标题,仅使用 curl 和命令行(标题不应来自文件),并且对于同一请求中的每个附件,它们应该是不同的。但目前我只能指定每个文件的内容类型(已记录)。我没有为我的任务找到任何文档示例。

我使用类似的东西:

curl -X POST --form "file=@test1.txt" --form "file=@test2.jpg" http://host:port

结果如下(用 wireshark 重构)。默认情况下没有TEST字(见下文)。

POST / HTTP/1.1
Host: host:port
User-Agent: curl/7.52.1
Accept: */*
Content-Length: 408
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------d7a9fdc4812ebc3b

 [SERVER REPLY:]  HTTP/1.1 100 Continue

--------------------------d7a9fdc4812ebc3b
Content-Disposition: form-data; name="file"; filename="test1.txt"
Content-Type: text/plain
TEST  <-- This is from _curl_ C code bruteforce. Here should be "Content-ID:from_command_line_for_file_1"

CONTENTS_OF_test1.txt
line2
line3

--------------------------d7a9fdc4812ebc3b
Content-Disposition: form-data; name="file"; filename="test2.jpg"
Content-Type: image/jpeg
TEST  <-- This is from _curl_ C code bruteforce. Here should be "Content-ID:from_command_line_for_file_2"

CONTENTS_OF_test2.jpg
line2
line3

--------------------------d7a9fdc4812ebc3b--

为了看看 curl 是否可行,我深入研究了它的源代码。在 'formdata.c' 行 ~1290 处,是我的确切任务的代码。但是如何激活此代码?为了确认这段代码是否真的适用于每个文件的处理,我强制它进行测试,它可以工作(参见上面的“TEST”字样)。

     curList = file->contentheader;
      while(curList) {
    /* Process the additional headers specified for this form */
    result = AddFormDataf(&form, &size, "\r\n%s", curList->data);
    if(result)
      break;
    curList = curList->next;
      }
// my bruteforce added line for test:
      result = AddFormDataf(&form, &size, "\r\n%s", "TEST");

所以看起来我的任务已经被 curl 支持了,但是如何使用它,以及我应该通过命令行传递哪些参数(而不是来自某个文件的 /)?

man curl 并没有对此提出太多建议,但它说“在手册中查看更多示例和详细信息”,但我找不到有用的东西。

卷曲 7.52.1

谢谢。

【问题讨论】:

    标签: linux curl post soap command-line-interface


    【解决方案1】:

    在 curl 7.58.0 中,您现在可以像这样add headers to a part in a multipart request

    curl -F "upload=@foo.txt;headers=\"X-My-Hdr: 42\"" http://host.com/path
    

    【讨论】:

    • 这正是我所需要的。这使得编写 Datacard SD260 Linux 打印实用程序(基于 bash 脚本并符合 KISS 规则)成为可能。此模型在 Linux 中没有任何打印可能性。我立马写了,关键命令是:
    • curl -F "upload=@request.xml;headers=\"Content-ID: \"" -F "upload=@$3;headers=\"Content -Transfer-Encoding: binary\";headers=\"Content-ID: \"" $url > reply.xml
    【解决方案2】:

    我在 curl 的邮件列表中收到了答复。 curl CLI 工具使用 libcurl 库。 “formdata.c”来自图书馆。它已经包含所有需要的代码。 但不幸的是,curl 工具没有使用库的这个特殊(有问题的)功能。这就是为什么提到的部分代码根本无法触发(通过CLI工具)的原因。

    所以我很不走运,但知道这是不可能的,总比不知道要好。 顺便说一句,然后我尝试修改 curl CLI 工具源代码,但发现这对我来说并不容易。 欢迎任何建议。 谢谢

    【讨论】:

      猜你喜欢
      • 2012-11-09
      • 1970-01-01
      • 2018-07-17
      • 2015-06-22
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      相关资源
      最近更新 更多