【问题标题】:How can I attach a file with a PHP cURL XML Call如何使用 PHP cURL XML 调用附加文件
【发布时间】:2010-11-11 04:23:24
【问题描述】:

我正在使用 Amazon AIMS API 上传库存文件,但上传文件的 cURL 调用出现问题。文档非常有限,因此没有示例代码对此有所帮助。

这是我到目前为止的 cURL 调用:

// $FILENAME is filename of the CSV file being uploaded:

$inventory = fopen($FILENAME, 'r') or die("Can't open file!");
echo $inventory;

curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_INFILE, $inventory);
curl_setopt($ch, CURLOPT_POSTFIELDS, ''); 
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filename));
curl_setopt($ch, CUROPT_PUT, TRUE);


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

我尝试将 $inventory 放入 CURLOPT_POSTFIELDS 并且没有 INFILE,但我得到了同样的错误。

在 XML 响应中,我得到了“NO_FILE_ATTACHED”,所以显而易见的问题是让文件附加到 XML 调用中。

我还尝试按照第一响应者所说的使用 php.net 上 curl_setopt 页面上的示例 #2 进行上传。

为此,我使用了以下代码:

$data = array('@/tmp/amazon_export.csv');

curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 


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

我收到了同样的NO_FILE_ATTACHED 回复。

有什么想法吗?

【问题讨论】:

    标签: php xml curl


    【解决方案1】:

    这对我有用:

    $hCurl = curl_init();
    curl_setopt($hCurl, CURLOPT_PUT,            true);
    curl_setopt($hCurl, CURLOPT_HEADER,         true);
    curl_setopt($hCurl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($hCurl, CURLOPT_CONNECTTIMEOUT, CURL_TIMEOUT_SECS);
    curl_setopt($hCurl, CURLOPT_URL,            "$oMessage->url/att/$fid");
    curl_setopt($hCurl, CURLOPT_HTTPHEADER,     $aCurlHeaders);
    // TODO it could be possible that fopen() would return an invalid handle or not work altogether.  Should handle that
    $fp = fopen ($finfo['tmp_name'], "r");
    curl_setopt($hCurl, CURLOPT_INFILE,         $fp);
    curl_setopt($hCurl, CURLOPT_INFILESIZE,     $finfo['size']);
    
    $sResp = curl_exec($hCurl);
    

    【讨论】:

      【解决方案2】:

      您将 PUTPOST 组合在一个 curl 操作中,这将不起作用。有关如何使用 POST 上传文件的示例,请参阅 curl_setopt 手册页的 example #2

      【讨论】:

      • 我仍然收到相同的 NO_FILE_ATTACHED 错误:$data = array('@/tmp/amazon_export.csv'); curl_setopt($ch, CURLOPT_URL, $URL); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data);如示例中所示。
      【解决方案3】:

      你有 $filename 和 $FILENAME,文件大小调用应该在你的情况下为 filesize($FILENAME)...

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2014-08-17
        • 1970-01-01
        • 2020-05-16
        • 2012-12-27
        • 2017-03-14
        • 1970-01-01
        • 2021-07-25
        • 2013-03-08
        • 2016-02-05
        相关资源
        最近更新 更多