当使用cURL上传文件时,我发现远程端的文件正在被修改并且标头信息被转储到文件中。我怀疑这是我的标头信息中的内容,但我已经迷失了。我几乎在尝试任何事情。
这是我正在使用的代码。
$fLocation = realpath('file.csv');
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$fType = finfo_file($finfo, $fLocation);
finfo_close($finfo);
$cFile = curl_file_create($fLocation);
$post = array('file'=> $cFile);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERPWD, $username.":".$password);
curl_setopt($ch, CURLOPT_HTTPHEADER, "Content-Type: application/octet-stream");
$result = curl_exec($ch);
我已经尝试了几种不同的Header内容类型,从application / binary到multipart / form-data,甚至根本没有在header中发送content-type。我怀疑我需要在标题中添加更多内容。
无论如何,我要发送的文件是.csv,但我想最后发送.xlsx文件(我正在使用.csv进行测试)。当我从远程服务器获取文件并在文本编辑器中将其打开时,我看到在文件的开头和结尾添加了信息,并且文件的原始数据介于两者之间。这是添加到顶部的内容。
=--------------------------a0fe4530540c659b
Content-Disposition: form-data; name="file"; filename="/home/username/website/path/file.csv"
Content-Type: application/octet-stream
而且,底部
--------------------------a0fe4530540c659b--
从本质上讲,当我所有的.xlsx文件到达另一端时都损坏时,我才弄清楚了。我将发送的内容更改为纯文本文件(CSV),那时我才意识到发生了什么。
这是更多有趣的信息。实际上,我实际上是通过它们的API向ZenDesk发送一些东西,而我显然是在PHP中使用cURL进行此操作。当我从Zendesk收到JSON回复时,部分内容如下所示...
[file_name] => file.csv
[content_url] => https://org.zendesk.com/attachments/token/jdjdjdjdjdjhdjdjdj/?name=file.csv
[content_type] => multipart/form-data
[size] => 5615
有趣的是,它看到我上传的内容是多部分/表单数据。即使更改标题中的Content-Type,这仍然适用。
当然,我在这里缺少愚蠢和容易的事情。
所有人都知道,这与标题有关。这是最终为我解决问题的代码。
$ch = curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10 );
curl_setopt($ch, CURLOPT_URL, $json_url);
curl_setopt($ch, CURLOPT_USERPWD, $username.":".$password);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/binary'));
curl_setopt($ch, CURLOPT_POST, true);
$file = fopen($fLocation, 'r');
$size = filesize($fLocation);
$fildata = fread($file,$size);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fildata);
curl_setopt($ch, CURLOPT_INFILE, $file);
curl_setopt($ch, CURLOPT_INFILESIZE, $size);
curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$result = curl_exec($ch);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句