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を使うといった選択肢もあるみたい。
関連記事
-
-
mpdfで「The /e modifier is …」エラー発生時の対応方法
pdf関連のPHPライブラリ「mPDF」を使っているページがエラーログにのってお ...
-
-
PHPにて「みんなの自動翻訳」のAPIで指定したテキストの言語判定する方法
迷惑メール対策等でメール本文が日本語のもののみ受信したい場合がある。ただ、本文内 ...
-
-
PHPでパスワードを保存する際に暗号(パスワードハッシュ)化させ、ログイン認証時に用いる方法
PHPでログイン認証を組み込む際に今までは特に暗号化は行っていなかった。と言うの ...
-
-
PHPで一括出力ではなく、ひとつずつ順次に出力する方法
PHPで重たい処理とかをしている際に、途中報告みたいな形で順次出力させる方法のメ ...
-
-
PHPで月末日を取得
PHPファイルを触っている際に日付処理時、 date('t')というものがあって ...