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を使うといった選択肢もあるみたい。
関連記事
-
-
PHP8系で「Warning: Attempt to read property "xxxxxx" 」エラーの対応方法
PHP8系&WordPress6.4.3で「Warning: Attem ...
-
-
PHPで特定のサイトからのリクエストのみ受け付けて処理する方法
指定したサイトからのリクエストのみ受け付けて処理したいという状況があった。その他 ...
-
-
PHPでランダムな値を取得したいケース諸々の対応方法
テストデータを作成する際にランダムな値を入れたかったけど、色々ケースがあったので ...
-
-
CodeIgniter4でGET / POSTパラメータの受け取りとルーティング設定方法
CodeIgniter4.4.4でページを開いた際にGET / POSTパラメー ...
-
-
地理院のジオコーディングAPIをPHPからリクエストする方法
以前に地理院のジオコーディングAPIをjavascriptからajaxでリクエス ...