Отправка пустого поля файла с CURLOPT_POSTFIELDS в составную форму

Я пытаюсь опубликовать составную html-форму, используя CURL CURLOPT_POSTFIELDS, но я не могу понять, как опубликовать ее без файлов.

При тестировании формы в обычном браузере поле «Файл» может быть пустым, а «Имя» и «Сообщение» — нет.

Это работает:

$array = array(
 "Name" => "Jon",
 "Message" => "My package was broken, please send new.",
 "File" => "@look_omg_its_broken_omgomg_look_at_the_corners.jpg"
);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $array);

Это не:

$array = array(
 "Name" => "Jon",
 "Message" => "My package was broken, please send new.",
 "File" => ""
);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $array);
$output = curl_exec($ch);

Этот последний вывод $ приводит к логическому значению (false). Я также пробовал эти варианты значений, но безуспешно.

"File" => "@"
"File" => "@/"
"File" => NULL
"File"
"File" => array("")
"File" => array("filename" => "")

Кто-нибудь знает лучше?


person Kristian Rafteseth    schedule 10.08.2011    source источник


Ответы (2)


Я почти уверен, что без рефакторинга вашего бэкэнда или эмуляции отправки формы из нескольких частей вручную вы не сможете решить свою проблему с помощью какой-либо CURLOPT_POSTFIELDS логики, также см.:

Если вы настаиваете на попытке решить эту проблему, используя только CURL, я предлагаю вам проверить исходный код ext/curl.

person Alix Axel    schedule 10.08.2011

Попробуйте просто полностью удалить поле File? Если он пуст, он не отправляется?

$array = array(
 "Name" => "Jon",
 "Message" => "My package was broken, please send new."
);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $array);
$output = curl_exec($ch);
person Femi    schedule 10.08.2011
comment
проблема в том, что бэкенд проверяет ключ, если поле File отсутствует, он создает трассировку стека, говорящую что-то о ссылке на нулевой объект. так нельзя сделать таким образом :( нужно отправить в поле «Файл», но его значение должно означать, что файл не будет отправлен. это должно быть возможно, так как веб-форма может это сделать. (никаких других асинхронных сообщений или чего-то еще ) - person Kristian Rafteseth; 10.08.2011
comment
Ах. Об этом уже спрашивали, но безрезультатно (см. stackoverflow.com/questions/5137382/). Я думаю, вам придется создавать тело multipart/form-data вручную, как указал @Alix Axel. В списках cURL есть старое старое электронное письмо, в котором в основном говорится следующее: curl. haxx.se/mail/lib-2005-06/0079.html. Удачи. - person Femi; 10.08.2011