【问题标题】:convert command curl to php将命令 curl 转换为 php
【发布时间】:2013-05-30 14:48:57
【问题描述】:

大家好!我有 curl 命令(音频文件上传):

curl -k -v -H "Expect: " -H "Content-Type:application/octet-stream" --data-binary  '@/Path/To/File/test.wav' -X POST  'https://myapi.com?param1=xxx&param2=yyy'

文件已成功上传且可读。但是当我使用 php 脚本时:

$filename = 'test.wav';
$file = '@/Path/To/File/test.wav';

$post_url = "https://someapi.com?param1=xxx&param2=yyy";
$post_str = array("$filename" => $file);

$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_URL, $post_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/octet-stream'));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect: '));
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_str);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$http_body = curl_exec($ch);
var_dump($http_body);

文件已成功上传,但 test.wav 无效(有一些错误)。我在脚本中做错了什么?

【问题讨论】:

  • 您看到的错误是什么?
  • 流格式不是wav

标签: php post curl


【解决方案1】:

我怀疑问题出在以下几行:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/octet-stream'));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect: '));

第二次调用将删除“Content-Type”标头。尝试合并这些:

$headers = array('Content-Type:application/octet-stream','Expect: ');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

【讨论】:

    【解决方案2】:
    $filename = 'test.wav';
    $file = '/Path/To/File/test.wav';
    
    $post_url = "https://someapi.com?param1=xxx&param2=yyy";
    $post_str = file_get_contents($file);
    $headers = array('Content-Type:application/octet-stream', 'Expect: ');
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_URL, $post_url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_str);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch,CURLOPT_VERBOSE,true); 
    curl_setopt($ch, CURLOPT_STDERR, fopen("/Path/to/header.txt", "w+"));
    $http_body = curl_exec($ch);
    

    它的工作完美。我自己解决了这个问题。文件上传到服务器二进制文件。谢谢大家!

    【讨论】:

      猜你喜欢
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多