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にて文字のあいまい検索(文字のゆれ)を実装する方法
Googleで検索する際に、ちょっと間違えて入力してしまっても「もしかして○○? ...
-
-
PHPでの$_REQUESTは色々危険
extract($_REQUEST)はかなり怖いよ、という話が最近あった。 でき ...
-
-
PhpSpreadsheetでフォーマット用のエクセルを読み込み、指定したセルにデータを書き込んだ上で別名で保存する方法
PHPで納品書等のフォーマット用のExcelを読み込み、指定したセルにデータを書 ...
-
-
PHPにて指定した期間内のランダムな日付をn件生成し、日付順にソートした上で受け取る方法
PHPにて指定した期間内のランダムな日付を指定した数だけ生成し、さらに日付順にソ ...
-
-
Codeigniter4でMySQLに接続しCRUD操作する方法
Codeigniter4.4.4でMySQLに接続しCRUD操作したい。また、任 ...