doujuan2688 2017-07-25 10:37
浏览 212
已采纳

Curl PHP PUT请求更改文件内容

I use a PUT request with curl php in one of my scripts to upload a file to an external file repository using a REST API. However, the uploaded files contain information about the Content-Disposition, the Content-Type and some alpha-numeric code at both the beginning and the end of the file, rendering the useless unless manually enditing again.

The unnecessary overhead looks like this:

--------------------------e876c4b8eee91562 Content-Disposition: form-data; name="test_file"; filename="test_3.xlsx" Content-Type: application/octet-stream

The code I use to do the request is:

  $ch = curl_init($upload_url);
  $cfile = new CURLFile($file_realpath, 'application/octet-stream', $base_file_name);
  $data = array ('test_file' => $cfile);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept:application/json',
    'Content-Type:application/octet-stream',
  ));
  b2share_ignore_certificates($ch);
  curl_setopt($ch, CURLINFO_HEADER_OUT, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $output = curl_exec($ch);

  $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  $headerSent = curl_getinfo($ch, CURLINFO_HEADER_OUT);

  curl_close($ch);

I can't change the request to POST, as the REST API on the other side needs a PUT request. Any ideas on how to get rid of the overhead?

  • 写回答

2条回答 默认 最新

  • dongyu4908 2017-07-31 12:51
    关注

    OK. I found the answer to the question here: PHP Curl post a file without header

    Thus changing the line

    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    

    to

    curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents($file_realpath));
    

    fixes the issue. This is probably not a very "clean" solution, but it works. I'd be glad to hear about better solutions though.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 请问各位,如何在Jetson nano主控板的Ubuntu系统中安装PyQt5
  • ¥15 MAC安装佳能LBP2900驱动的网盘提取码
  • ¥400 微信停车小程序谁懂的来
  • ¥15 ATAC测序到底用什么peak文件做Diffbind差异分析
  • ¥15 安装ubantu过程中第一个vfat 文件挂载失败
  • ¥20 GZ::CTF如何兼容一些靶机?
  • ¥15 etcd集群部署问题
  • ¥20 谁可以帮我一下问一下各位
  • ¥15 为何重叠加权后love图的SMD与svyCreateTableOne函数绘制基线表的不一致
  • ¥150 求 《小魔指》街机游戏机整合模拟软件