【发布时间】:2017-03-21 23:50:18
【问题描述】:
我在将带有 cURL 的文件上传到远程服务器时遇到问题。 仅当 POST 变量按顺序排列时,远程服务器才接受该文件。 就我而言:sid、cmd、uploadfile 我按这个顺序用一个简单的 HTML 上传表单对其进行了测试,一切正常。但是如果我替换输入字段的顺序,比如:cmd、sid、uploadfile 它拒绝我的上传。
所以这是我的 cURL 代码,它不会按照我在数组中设置的顺序发送变量。 如何强制 cURL 按照设置变量的顺序进行 POST。
$file = "/var/www/html/dl/big.mp4";
$target_url = 'http://upload.site/uploadpage';
$file_name_with_full_path = realpath($file);
$post = array('sid' => 'H1nbWKcdYP7eS7DzJk0Z6BjGaC842vPO', 'cmd' => 'uploadVideoFiles', 'uploadfile'=>'@'.$file_name_with_full_path);
$ch = curl_init();
$browser = 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0';
curl_setopt($ch, CURLOPT_USERAGENT, $browser);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($ch, CURLOPT_URL, $target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Encoding: gzip, deflate',
'Accept-Language: en-US,en;q=0.5',
'Cache-Control: max-age=0',
'Connection: keep-alive',
'Host: upload.sitehost',
)
);
$result=curl_exec($ch);
curl_close ($ch);
echo $result;
【问题讨论】: