curl:来自CLI的每个文件的附加标头(用于多部分POST,SOAP等)

时间:2017-02-10 01:33:18

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

我尝试添加 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 ,我会深入了解其源代码。有&#39; formdata.c&#39; line~1290,代码完全是我的任务。但是如何激活这段代码呢?为了确认这个代码是否真的用于每个文件的处理,我强制它进行测试,并且它可以工作(参见上面的&#39; TEST&#39;单词)。

     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

感谢。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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