0

encType: multipart/form-data encoding の HTTP ポストを使用して、XML 文字列データをサイトに送信する PHP コードを作成しています。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()が正しい関数でしょう。しかし、それはコア機能ではありません。PHP 5.3 のデフォルトではインストールされていない http pecl 拡張機能で利用できます。

また、multipart/form-dataデフォルトごとに (代わりに x-www-form-urlencode) を生成しません。$filesただし、偽の配列を提供することでそれをだますことができます。

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

2 番目の問題は、最初の行を切り取る必要があることです。それContent-Typeが正しいboundary=属性です。そして、それは私には面倒に思えます。

そのため、 HttpRequestクラスを直接使用して、POST エンコーディング送信を一度に処理できるようにすることをお勧めします。または、HTTP 拡張モジュールの存在に関係なく機能する PEAR または Zend クラスを使用します。

于 2011-02-19T21:23:08.750 に答える