@ ДугВ четко ответил на этот вопрос, но я все еще хотел бы добавить сюда несколько кодов, чтобы объяснить точку зрения Дуга.(И исправьте ошибки в приведенном выше коде)
Решение 1: URL-кодирование данных POST с заголовком типа содержимого: application / x-www-form-urlencoded.
Примечание: выне нужно поочередно кодировать поля $ _POST [] urlencode, функция http_build_query () может выполнять работу urlencoding.
$fields = array(
'mediaupload'=>$file_field,
'username'=>$_POST["username"],
'password'=>$_POST["password"],
'latitude'=>$_POST["latitude"],
'longitude'=>$_POST["longitude"],
'datetime'=>$_POST["datetime"],
'category'=>$_POST["category"],
'metacategory'=>$_POST["metacategory"],
'caption'=>$_POST["description"]
);
$fields_string = http_build_query($fields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
Решение 2. Передача массива напрямую как данных публикации без URL-кодировкив то время как заголовок Content-Type будет установлен в multipart / form-data.
$fields = array(
'mediaupload'=>$file_field,
'username'=>$_POST["username"],
'password'=>$_POST["password"],
'latitude'=>$_POST["latitude"],
'longitude'=>$_POST["longitude"],
'datetime'=>$_POST["datetime"],
'category'=>$_POST["category"],
'metacategory'=>$_POST["metacategory"],
'caption'=>$_POST["description"]
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
Оба фрагмента кода работают, но используют разные заголовки и тела HTTP.