【问题标题】:POST file Curl Commandline to PHP CurlPOST 文件 Curl 命令行到 PHP Curl
【发布时间】:2015-02-21 06:52:24
【问题描述】:

我们正在尝试转换使用以下运行正常的 curl cmdline

curl --request POST --data-binary @"/home/project/enrol/my.wav" --header "Content-Type:audio/wav" --header "VsitEmail: 200037test2@test.com" --header "VsitPassword: 8270f2824111e04d9278c01a92b388147d9d02e0b50d946d25d00db375ff1282" --header "VsitDeveloperId: 200037" https://siv.voiceprintportal.com/sivservice/api/enrollments

到不断给出内部错误的 PHP libcurl。

请指出我哪里错了。

代码

$ch = curl_init();

$path="/home/project/enrol/my.wav";

curl_setopt($ch, CURLOPT_URL,$url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_POST,true);

curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);

curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: audio/wav","VsitEmail: 200037test2@test.com","VsitPassword: 8270f2824111e04d9278c01a92b388147d9d02e0b50d946d25d00db375ff1282","VsitDeveloperId: 200037"));

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

curl_setopt( $ch , CURLOPT_VERBOSE , 0 );

curl_setopt($ch, CURLOPT_POSTFIELDS,array('file' => '@'.$path));

$result = curl_exec($ch);

//close connection
curl_close($ch);

print_r($result);

更新 1

$localfile='/home/project/enrol/my.wav';
$url = 'https://siv.voiceprintportal.com/sivservice/api/enrollments';

$ch = curl_init();
$fields = array('file' => '@' .$localfile);

$resource = curl_init();

curl_setopt($resource, CURLOPT_URL, $url);
//curl_setopt($resource, CURLOPT_HTTPHEADER, $header);
curl_setopt($resource, CURLOPT_HTTPHEADER, array("Content-Type: 
audio/wav","VsitEmail: 200037test2@test.com","VsitPassword: 8270f2824111e04d9278c01a92b388147d9d02e0b50d946d25d00db375ff1282","VsitDeveloperId: 200037"));
curl_setopt($resource, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($resource, CURLOPT_POST, 1);
curl_setopt($resource, CURLOPT_BINARYTRANSFER, true);
curl_setopt($resource, CURLOPT_POSTFIELDS, $fields);
//$result = json_decode(curl_exec($resource));
$result=curl_exec($resource);
curl_close($resource);

echo "The result is";

print_r($result);

【问题讨论】:

  • 那是上传和 REST 服务器不支持。可能我没有得到在 PHP Curl 中使用 --data-binary @"/home/project/enrol/my.wav" 的正确方法
  • 您没有在 PHP CURL 代码中设置标题。
  • curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: audio/wav","VsitEmail: 200037test2@test.com","VsitPassword: 8270f2824111e04d9278c01a92b388147d9d02e0b50d946d25d00db375ff1282","VsitDeveloperId: 200037"))应该不一样吗?

标签: php api rest audio curl


【解决方案1】:

检查以下代码

$url = 'http://google.com';
$header = array('Content-Type: multipart/form-data');
$fields = array('file' => '@' . $_FILES['file']['tmp_name'][0]);

$resource = curl_init();
curl_setopt($resource, CURLOPT_URL, $url);
curl_setopt($resource, CURLOPT_HTTPHEADER, $header);
curl_setopt($resource, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($resource, CURLOPT_POST, 1);
curl_setopt($resource, CURLOPT_POSTFIELDS, $fields);
$result = curl_exec($resource);
curl_close($resource);

【讨论】:

  • 我将 $fields 更改为本地文件名,并将 HTTPHEADER 替换为我的代码。它给出了相同的错误内部服务器错误。
  • 使用更新的代码更新您的问题,但您会遇到错误。如果您通过了错误的屏幕截图。
  • 内部服务器错误主要意味着您的代码中有错误。一些语法或逻辑
  • 我已经用编辑后的代码更新了你的答案。不知何故无法上传屏幕截图,因为它给出了学分错误。
  • 总是在你的问题中更新你的代码,而不是在别人的答案中。顺便说一句,我已经更新了你的问题
【解决方案2】:

它通过传递原始数据文件而不是数组来解决。正确的代码是

$localfile='@/home/project/enrol/my.wav';
$url = 'https://siv.voiceprintportal.com/sivservice/api/enrollments';
$data = file_get_contents('/home/project/enrol/my.wav');
$headers = array();
$headers[] = 'X-Requested-With: JSONHttpRequest';
$headers[] = 'Content-Type: audio/wav';
$headers[] = 'VsitEmail: 200037test2@test.com';
$headers[] = 'VsitPassword: 8270f2824111e04d9278c01a92b388147d9d02e0b50d946d25d00db375ff1282';
$headers[] = 'VsitDeveloperId: 200037';
$resource = curl_init();
curl_setopt($resource, CURLOPT_URL, $url);
curl_setopt($resource, CURLOPT_HTTPHEADER,$headers);
curl_setopt($resource, CURLOPT_POST,1);
curl_setopt($resource, CURLOPT_BINARYTRANSFER, true);
curl_setopt($resource, CURLOPT_POSTFIELDS,$data);
$result = json_decode(curl_exec($resource));
curl_close($resource);
echo "The result is";
print_r($result);

【讨论】:

    猜你喜欢
    • 2013-04-18
    • 2013-08-25
    • 2011-08-15
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2015-12-31
    相关资源
    最近更新 更多