составная форма, кодирующая строку с PHP - PullRequest
0 голосов
/ 19 февраля 2011

Я пишу код PHP для отправки данных XML-строки на сайт, используя HTTP-сообщение с кодировкой encType: multipart / form-data. Я подумываю об использовании PHP-функции http_post_data. Прежде чем отправлять данные, я считаю, что мне нужно их кодировать, но я не вижу функции PHP, чтобы сделать это для меня, и при этом я не знаю, как написать такую ​​функцию самостоятельно.

Это то, что у меня пока есть (но http_request_body_encode () определенно не правильная функция):

$options = array('headers' => array('Content-Type' => 'multipart/form-data'));
$fields = array('operation' =>'doMDUpload', 'login_id' => $doi_username, 'login_passwd' => $doi_password, 
  'area' => ($debug ? "test" : "live"), 'fname' => $writer->outputMemory());
$info = array();
$response = http_post_data($crossref_deposit_url, http_request_body_encode($fields, array()), $options, $info);

$writer->outputMemory - строка XML, содержащая библиометрические данные.

1 Ответ

1 голос
/ 20 февраля 2011

Ну, http_request_body_encode () будет правильной функцией.Но это не основная функция.Он доступен с расширением http pecl, он даже не установлен по умолчанию в PHP 5.3.

Он также не генерирует multipart/form-data по умолчанию (вместо x-www-form-urlencode).Вы можете обмануть это, предоставив поддельный массив $files, однако:

print http_request_body_encode(array("field"=>123), array(NULL=>NULL));

Теперь вторая проблема заключается в том, что вам нужно вырезать первую строку.Это Content-Type с правильным атрибутом boundary=.И это мне кажется странным.

Так что лучше использовать класс HttpRequest напрямую, и пусть он обрабатывает POST-кодировку и , отправляющую сразу.В качестве альтернативы используйте класс PEAR или Zend, которые также работают независимо от наличия модуля расширения HTTP.

...