php:curl脚本工作但不在php文件中

时间:2013-12-08 03:33:53

标签: php curl

我有一个在终端中正常工作的curl脚本。

curl -XPOST \
     -F "file=@var/www/myfile.wav;type=audio/wav" \
     -H 'Authorization: Bearer $MY_TOKEN' \
     'https://myurl'

我在我的php文件中尝试过这种方式,

<?php

    $url = "https://myurl";
    $key =  "myKey";

    $path = "/var/www/";
    $fileName = "myfile.wav";
    $data['file']=  "@".$path.$fileName;
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);

    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER,array("Authorization: Bearer $key"));

    $response = curl_exec($ch);

    curl_close($ch);

    echo $response;

?>

我从服务器收到错误。似乎我没有像服务器期望的那样提出请求。我错过了PHP脚本中的任何内容吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

$ data = array('file'=&gt; file_get_contents($ path。$ fileName));

您使用的CURL库可能存在问题。

或者可能阻止PHP建立HTTPS连接。

尝试使用PHP中的CURL进行一系列简单测试,就像第一次使用POST false:

<?php 

    $url = "https://myurl/";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    header("Content-Type: text/plain");
    echo $response;
?>

然后使用POST true ...

<?php 

    $url = "https://myurl/";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);
    header("Content-Type: text/plain");
    echo $response;
?>

答案 1 :(得分:0)

由于它是HTTPs URL,您需要使用此参数

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);