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にて同一サーバの別ディレクトリでセッションを振り分ける方法
同じサーバ内にmemberとownerの別ディレクトリがあり、それぞれにsess ...
-
-
PHPでURLを解析してクエリ(GETパラメータ)を抽出する方法
formからGETで送信したクエリ(パラメータ)を、受信した側で抽出し、キーと値 ...
-
-
PHPでサイトURLからtitleとRSS用URLを取得
サイトのURLからRSS用URLとサイトタイトルを自動で取得したかった。その方法 ...
-
-
PHPでファイルを添付してメールを送信する方法(PHPMailer)
PHPでファイルを添付の上、メールを送信したかった。方法を探したところphpma ...
-
-
PHPのZipArchive::addFileでファイルが追加できない場合の対応方法
過去記事を参考にPHPにて複数のファイルをzipファイル化後、ダウンロードさせた ...