
質問させて頂きます。
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のタイプを入れるのだと思います。
質問の内容に分かりづらい部分もあるかもしれませんが、
もし何かご存じの方がいらっしゃれば、ご教授のほどよろしくお願いいたします。
No.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の情報を補足として記載されたら、他の方の回答の参考になると思います。)
以上、間違っていたらすみませんが、ご参考になれば幸いです!
ご丁寧に回答頂きありがとうございます。
とても参考になりましたので、こちらの回答を元に、再度対応してみたいと思います。
改めて、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
フォームで戻った際に入力済み...
-
セッション関数を使わずにファ...
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
アンドロイドスマホでのphp ech...
-
Postgresの特定のカラムからス...
-
ここで言う空文字の意味とは?
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
SplFileObject を利用したとき...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
onedrive にexcelファイルをア...
-
「クラウドにアップロード」」...
-
BASP21のFTPで日本語ファイル名...
-
ftpでアップロードが出来ない
-
FTPClientで転送結果(OKかFAIL)
-
youtubeに音声のみのmp4ファイ...
-
PHPでxmlをAPIに送信する方法(P...
-
os x serverのアップロードファ...
-
ファイルのアップロードがどう...
-
$_FILES['x']['error']について
-
DUMPした巨大SQLファイルをイン...
-
違法アップロードについて
-
ファイルアップロードの日付に...
-
ファイルアップロードしたもの...
-
PHPで音楽ファイルのアップ...
-
アップロードするとバックスラ...
-
BASP21を利用してリネームファ...
-
ファイルサイズがpost_max_size...
-
ファイルのアップロードを行う...
-
SmartyでHTMLソースの変更が反...
おすすめ情報
今「curl_getinfo($curl)」内容を出力したところ
[upload_content_length]が「float 1257」と表示されました。
これはXMLは正常に送信されてるということなのでしょうか。