【问题标题】:php curl multipart/data-form content-type for each boundary每个边界的 php curl multipart/data-form 内容类型
【发布时间】:2015-05-14 23:00:24
【问题描述】:

我想我想知道是否可以在同一篇文章中发布包含 json、文件、txt、xml 的多部分/数据形式内容类型。 所以请求看起来像这样:

Content-Type: multipart/form-data; boundary=BOUNDARY
--BOUNDARY
Content-type:application/json
Content-Disposition:form-data

{{"SomeJsonObject":"valueOfObject"}}
--BOUNDARY
Content-type:application/xml
Content-Disposition:form-data

<node>SomeXML Nodes</node>
--BOUNDARY--


我知道我可以将其编码为字符串,手动包含边界,但我想知道是否可以通过

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

谢谢

【问题讨论】:

    标签: php json xml curl multipartform-data


    【解决方案1】:

    您也可以使用此 hack 将 Content-Type 传递给每个多部分边界:

    $url = 'https://...'
    $data = ["json\";\nContent-type:\"application/json\";\nContent-disposition:\"form-data" => '{"my":json}',
             "xml\";\nContent-type:\"application/xml\";\nContent-disposition:\"form-data" => "<root/>"];
    
    $resource = curl_init();
    curl_setopt($resource, CURLOPT_URL, $url);
    curl_setopt($resource, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($resource, CURLOPT_POSTFIELDS, $data);
    $result = curl_exec($resource);
    curl_close($resource);
    

    想法是将所有必要的标头“注入”到“名称”选项中,就像在 SQL 注入中一样。

    上面的代码将发送带有所有必要标头的多部分请求:

    ------------------------------b66e31048210
    Content-Disposition: form-data; name="json";
    Content-type:"application/json";
    Content-disposition:"form-data"
    
    {"my":json}
    ------------------------------b66e31048210
    Content-Disposition: form-data; name="xml";
    Content-type:"application/xml";
    Content-disposition:"form-data"
    
    <root/>
    

    但要小心,这些东西的记录非常糟糕。

    【讨论】:

      【解决方案2】:

      除了自己建立边界之外,没有办法在 POST 中发布 STRING 数据,但 curl 可以从磁盘发布文件,所以

      file_put_contents('/tmp/fileForSend.json');
      curl_setopt($curl, CURLOPT_POSTFIELDS, array(
        'file' =? '@/tmp/fileForSend.json;type=application/json', // this is CURL integrared feature, curl will read file itself
      ));
      

      所以把 '@' sybmol 对 CURL 意味着它必须读取文件并将其内容放入 POST 请求中

      【讨论】:

      • 我会接受这个答案,谢谢。虽然,我不需要发布另一个故事的文件。只是多部分数据,包括自定义标头 json 然后 xml,然后只是字符串。我认为图书馆在那个领域会很广泛,但无论如何......我最终只是自己构建了边界。
      猜你喜欢
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      相关资源
      最近更新 更多