Как я должен «перевести» следующую команду curl в действительную функцию php curl?
curl -X POST
-F "[email protected]"-F parameters=%7B%22classifier_ids%22%3A%5B%22testtype_205919966%22%5D%2C%22threshold%22%3A0%7D
'https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify?api_key={key}&version=2016-05-20'"
Кажется, что я делаю что-то не так и не могу понять проблему:
$method = 'POST'
$url = 'https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify?api_key=<myApiKey>&version=2016-05-20'
$data = array(
array(<file-information>),
array(<json-string>),
)
$header = array(
'Content-Type: application/json',
'Content-Length: ' . strlen(<json-string>),
)
)
public function send($method, $url, $data = null, $header = null)
{
$curl = curl_init();
switch ($method) {
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
if ($data) {
$postData = $this->renderPostData($data);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
}
break;
}
if($header) {
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
}
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($curl);
}
protected function renderPostData($data)
{
$postData = array();
foreach ($data as $file) {
if ($file['isFile']) {
if(pathinfo($file['path'], PATHINFO_EXTENSION) == 'zip'){
$postData[$file['name']] = new \CURLFile($file['path'], 'application/zip', $file['name']);
}
else {
$postData[$file['name']] = new \CURLFile($file['path'], 'application/octet-stream', $file['name']);
}
} else {
// this contains the json encoded string
$postData[$file['name']] = $file['path'];
}
}
return $postData;
}
Я пробовал несколько вариантов, и теперь ошибка Watson Visual Recognition API:
{
«custom_classes»: 0,
«изображений»: [
{
«ошибка»: {
«description»: «Неверные данные изображения. Поддерживаемые форматы: JPG и PNG.»,
«error_id»: «input_error»}
}
],
«images_processed»: 1
}
до этого было:
{
«ошибка»: {
«код»: 400,
«description»: «Получено недопустимое содержимое JSON. Невозможно проанализировать.»,
«error_id»: «parameter_error»},
«images_processed»: 0
}
Спасибо за помощь!
Моя проблема была этой строкой:
$postData[$file['name']] = new \CURLFile($file['path'], 'application/zip', $file['name']);
последний параметр — это $ postname. Поэтому, чтобы исправить эту проблему, мне пришлось изменить эту строку на:
$postData[$file['name']] = new \CURLFile($file['path'], mime_content_type($file['path']), basename($file['path']));
и это сработало — после того как я тоже убрал не тот $header
полностью
🙂
Других решений пока нет …