将curl命令转换为php代码

3

我尝试将来自https://incarnate.github.io/curl-to-php/的curl命令转换为URL,但是它们没有给我正确的php代码。请您帮忙。

curl -i -F account_id=12345 -F authhash=BKPda_T497AX4EjBsk3ttw9OcOzk -F audioFile=@CasioVoice.wav  https://url/upload

我尝试将这段代码转换为php代码,但没有得到正确的输出。
 $cmd = "curl -i -F 
                account_id=12345 -F 
                authhash=BKPda_T497AX4EjBsk3ttw9OcOzk -F 
                audioFile=@CasioVoice.wav 
                https://url/upload";
        exec($cmd,$result);

你得到了什么而不是正确的输出? - Federico klez Culloca
@FedericoklezCulloca 输出没有任何显示。 - Maneesh Rao
@AlivetoDie OP想要发送一个编码形式(-F,这也意味着一个POST请求),并获取HTTP头信息(-i)。但转换网站完全忽略了这些细节。 - tevemadar
可能是PHP + curl,HTTP POST示例代码?的重复。 - tevemadar
你可以尝试使用 https://curlconverter.com/php/。 - user3064538
显示剩余3条评论
2个回答

3
总结一下评论内容:
curl -i -F account_id=12345 -F authhash=BKPda_T497AX4EjBsk3ttw9OcOzk -F audioFile=@CasioVoice.wav  https://url/upload
将要成为
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"https://url/upload");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
    array(
       'account_id' => '12345',
       'authhash' => 'BKPda_T497AX4EjBsk3ttw9OcOzk',
       'audioFile' => new CURLFile('CasioVoice.wav')));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);

$server_output = curl_exec ($ch);
curl_close ($ch);

接下来,根据服务器的证书,您可能需要处理https。如果需要处理https,可以研究一下CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOST等选项,但我们希望您不需要使用它们。


代码现在正在执行,但我的音频文件没有推送到第三方。我正在使用$filepath = '@' . realpath('/callRecord/CasioVoice.wav')。 - Maneesh Rao
我在curl调用中放入了正确的authHash和account_id,但是它给了我401错误。虽然我在curl命令中做同样的事情,它却可以工作。请帮忙找到我哪里出了问题? - Maneesh Rao
@hanshenrik 是的,你说得对,http_build_query是个陷阱。预期@语法会起作用,所以我就让它保持不变了。 - tevemadar
@tevemadar 不,@语法不再被支持。在PHP 5.5中已经弃用了@(使用CURLFile代替),在PHP 5.6中默认禁用(请参阅CURLOPT_SAFE_UPLOAD文档),并在PHP7中完全删除。 - hanshenrik
@tevemadar,该死,你说得对。有人应该修复CURLOPT_POSTFIELDS文档。 - hanshenrik
显示剩余3条评论

0

你的PHP代码尝试使用带有大量换行符的参数执行curl,这些换行符会让curl感到困惑。去掉这些换行符,它就应该可以正常工作了。

$cmd = "curl -i -F account_id=12345 -F authhash=BKPda_T497AX4EjBsk3ttw9OcOzk -F audioFile=@CasioVoice.wav https://url/upload";

或者使用字符串拼接来避免在运行时出现换行符,同时仍然保留源代码中的换行符。

 $cmd = "curl -i ".
        "-F account_id=12345 ".
        "-F authhash=BKPda_T497AX4EjBsk3ttw9OcOzk ".
        "-F audioFile=@CasioVoice.wav " .
        "https://url/upload";

顺便说一下,你也可以使用PHP的libcurl包装器来达到同样的效果。

$ch = curl_init ();
curl_setopt_array ( $ch, array (
        CURLOPT_POSTFIELDS => array (
                "account_id" => 12345,
                "authhash" => "BKPda_T497AX4EjBsk3ttw9OcOzk",
                "audioFile" => new CURLFile ( "CasioVoice.wav" ) 
        ),
        CURLOPT_URL => "https://url/upload",
        CURLINFO_HEADER_OUT=>1
) );
curl_exec ( $ch );
curl_close ( $ch );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接