0

我正在编写 PHP 代码以使用带有 encType: multipart/form-data 编码的 HTTP post 将 XML 字符串数据发送到站点。我正在考虑使用 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 字符串。

4

1 回答 1

2

好吧,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 扩展模块,它们也可以工作。

于 2011-02-19T21:23:08.750 回答