Я уже некоторое время работал с php Curl, я недавно наткнулся на кусок CLI CLI, который я не могу заставить работать в curl PHP.curl CLI в сравнении с php curl
Завиток CLI выглядит как следует:
curl -qgsSkH "Content-Type: multipart/form-data"
--no-progress-bar
--header "X-Api-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
-F "[email protected]/tmp/test.txt"
-F "options={\"application\":\"2\",\"timeout\":\"500\",\"priority\":\"0\"}"
https://xxxaddrxxx:443/API/vers1.0/sub
Я использую следующий код PHP локон, чтобы имитировать выше CLI завиток:
$file = new CURLFile($fileEntry->getStoragePath());
$file->setMimeType($fileEntry->mime);
$file->setPostFilename($fileEntry->original_filename);
$data = array();
$data['options'] = json_encode($postData);
$data['filename'] = $file;
$headers = array();
$headers[] = "Content-Type: multipart/form-data";
$headers[] = 'X-FeApi-Token: '.$this->authToken;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
$curl_response = curl_exec($curl);
Когда выходной массив данных $ это даст следующие:
array:2 [
"options" => "{"application":"2","priority":"0","timeout":"5000"}"
"filename" => CURLFile {
+name: "/etc/tmp/5645db226dbddINVOICE-722.doc"
+mime: "application/msword"
+postname: "INVOICE-722.doc"
}
]
Это все правильные данные, соответствующие тому, что я предоставляю в коде.
Тем не менее сервер, на котором я пытаюсь нажать файл и метаданные, также ответил ошибкой, что массив параметров или имя файла не указаны или не загружены. Эта ошибка предоставляется только тогда, когда я пытаюсь проталкивать ее через PHP, когда я запускаю команду raw curl на сервере Linux, она работает нормально.
Я делаю ошибку в отношении двойной опции -F? Или я пропустил что-то в новом методе публикации CURLFile, потому что во всех предыдущих сообщениях в Stack Overlow используется устаревший метод с использованием «@»?
Начальная часть команды curl cli и php curl кажется идентичной при отладке. Сама полезная нагрузка не может быть легко проверена из-за шифрования ssl (https, который не может быть отключен на принимающем сервере).
Заранее спасибо.
G.