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を使うといった選択肢もあるみたい。
関連記事
-
エラー処理を1ページにまとめる
できるだけまとめておいた方が効率よさそうなのでメモ。 メインのフォルダにlogs ...
-
PHPでファイルパスorフォルダパスの確認
PHPで画像とか触る際にフォルダのパス、ファイルのパスを 知りたいことがあったの ...
-
PHPにて「ImageHash」ライブラリを使用し画像の類似度を算出する方法
以前にPHPの「image-comparator」ライブラリで画像の類似度を算出 ...
-
PHPMailerでエラーメッセージ及びデバッグログの表示方法について
PHPMailerでエラーメッセージ及びデバッグログを表示させたいというケースが ...
-
PHPとLINEを連携させて通知を送る方法(file_get_contents / curlの2パターン)
PHPとLINEを連携させ、LINEに何らかの通知メッセージを送信したい。以下に ...