PHPから他サーバのAPIに対してPOST送信する方法
2024/02/25
PHPから他サーバのAPIに対してPOSTでリクエストしたかった。GETだったらAjaxを思い浮かべるけど、API側のサーバでGETリクエストが制限されていた為、その手段が取られなかった。以下にPHPでPOSTリクエストする方法のメモ。
ソース
<?php
//POSTで送りたいデータ
$query = array(
'id' => 12345,
'pass' => 'sfmaKDMdfgd',
'name' => '名前'
);
//URLエンコードされたクエリ文字列を生成
$content = http_build_query($query, '', '&');
//ヘッダ設定
$header = array(
'Content-Type: application/x-www-form-urlencoded', //form送信の際、クライアントがWebサーバーに送信するコンテンツタイプ
'Content-Length: '.strlen($content) //メッセージ本文の長さ
);
//ストリームコンテキスト設定
$context = array(
'http' => array(
'ignore_errors' => true, //ステータスコードが失敗を意味する場合でもコンテンツを取得
'method' => 'POST', //メソッド。デフォルトはGET
'header' => implode("\r\n", $header), //ヘッダ設定
'content' => $content //送信したいデータ
)
);
$url = 'http://hoge.com/hoge.api';
$res = file_get_contents($url, false, stream_context_create($context));
ソース2(2020/07/15追記)
原因は不明だが上記方法で送信できないケースがあった。調べたところ以下方法で対応できたので念のためメモ。
header('HTTP/1.1 307 Temporary Redirect');
header('Location: http://hogehoge.com');
exit();
POSTデータを所持している状態で307リダイレクトするとPOST送信される模様。
その他
file_get_contentsが有能すぎる。他にもcURLを使うといった選択肢もあるみたい。
関連記事
-
-
PHPで画像を分割し並べ替えて出力したものをJavaScriptで復元する方法
ある電子書籍サイトをブラウザの開発者ツールで見てみたところ、PHPでページ画像を ...
-
-
CodeIgniter4の各種設定項目のまとめ記事
CodeIgniter4.4.4の各種設定項目を後から確認できるようまとめておき ...
-
-
PHPでdatetime型のデータを年月日時分秒に分割する方法
datetime型を年月日時分秒でそれぞれに分割させたい時に今まではいちいちex ...
-
-
PHPのZipArchive::addFileでファイルが追加できない場合の対応方法
過去記事を参考にPHPにて複数のファイルをzipファイル化後、ダウンロードさせた ...
-
-
jQuery.uploadでリアルタイムプレビュー
やりたい事は、 ・<input type="file">で画像を選択 ...