プロが教えるわが家の防犯対策術!

質問させて頂きます。

XMLをAPIに送信する方法に関して質問させて頂きます。

まずはじめに、
以前(PHP5.2)は、下記の方法でXMLを送信することに成功していました。
-----------------------------------------------------------------
$xml = 'xml~~~~';

$curl = curl_init();
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 180);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $URL);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);

curl_exec($curl);
curl_close($curl);
-----------------------------------------------------------------

PHP5.6環境で上記の方法を試した場合、接続はできているようなのですが、
XMLを正常に送れていないように思われます。
※全く関係無い場合は申し訳ありません。

自分なりに調べたところ、
PHP5.6以降はCURLFileクラスを利用するべきといった内容を見つけました。
しかし、CURLFileクラスの使用方法がいまいち分からず苦戦しております。

下に記述したものが実際に見つけた例です。
--------------------------------------------------------------------
// CURLFile オブジェクトを作ります
$cfile = new CURLFile('cats.jpg','image/jpeg','test_name');

// POST データを設定します
$data = array('test_file' => $cfile);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
--------------------------------------------------------------------
「cats.jpg」の部分にはファイルパスを記述するらしいのですが、今回xmlはファイルから読み込むのでなく、「$xml = 'xml~~~~';」といった感じで、その場で入力をするつもりでいます。
CURLFileではファイルとして存在するものしかアップロード出来ないのでしょうか。

また、「test_name」「test_file」の部分に何を記述して良いのかも分かりません。
「image/jpeg」の部分にはxmlのタイプを入れるのだと思います。


質問の内容に分かりづらい部分もあるかもしれませんが、
もし何かご存じの方がいらっしゃれば、ご教授のほどよろしくお願いいたします。

質問者からの補足コメント

  • 今「curl_getinfo($curl)」内容を出力したところ
    [upload_content_length]が「float 1257」と表示されました。
    これはXMLは正常に送信されてるということなのでしょうか。

      補足日時:2015/05/22 16:59

A 回答 (1件)

こんにちは。



私は普段cURL使わないので的確な回答ではないかも知れませんが、CURLFileを使うとmultipart/form-dataでのファイルアップロードになってしまうのではないでしょうか。

ちなみにマニュアルを見る限りでは、「test_name」は「どういうファイル名としてアップロードするか」で、「test_file」はPOSTデータのnameのようです。

マニュアル
http://php.net/manual/ja/curlfile.construct.php

ここまでの回答でたぶん違和感をもたれているかもしれませんが、その場合はやはり、アップロード(CURLFile)ではないのかもしれません。

ただ、普通のPOSTで送るにしても、一般的には下記例のように、nameとvalueのペアで送りますので、CURLOPT_POSTFIELDSにXMLをテキストで入力、というのも、違和感がある気がします。(xml内にnameとvalueの記載をされているのかもしれませんが、マニュアルを見る限りxml形式は対応の記載が無いような気がします)

(例)
http://deamu.hatenablog.com/entry/2015/02/11/214 …

ちなみにPHPからPOSTする方法の検討としてはこの辺もご参考になるかもしれません
http://www.programming-magic.com/20080226023511/

いずれにしても、もういちどAPIを再確認されてみてはいかがでしょうか。(あるいは、APIの情報を補足として記載されたら、他の方の回答の参考になると思います。)

以上、間違っていたらすみませんが、ご参考になれば幸いです!
    • good
    • 0
この回答へのお礼

ご丁寧に回答頂きありがとうございます。
とても参考になりましたので、こちらの回答を元に、再度対応してみたいと思います。

改めて、ありがとうございました。

お礼日時:2015/05/26 17:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!