勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ

PHPから他サーバのAPIに対してPOST送信する方法

   2024/02/25  PHP

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

  関連記事

他所のサーバからWordPressの記事情報をpostIDを指定して取得する方法
他所のサーバからWordPressの記事情報をpostIDを指定して取得する方法

他所のサーバからWPの記事IDを指定した上で、当該IDのタイトル・アイキャッチ画 ...

PHPで変数名を動的に変えて使う方法(可変変数)
PHPで変数名を動的に変えて使う方法(可変変数)

PHPで変数名を動的に変えて使用したかった。調べてみると可変変数というものがあり ...

PHPで数字のプラスとマイナスを反転させる方法
PHPで数字のプラスとマイナスを反転させる方法

PHPのプログラム内で数値のプラスとマイナスを反転させたい。以下に対応方法をメモ ...

PHPにて指定した期間内の合計日数を出力する方法
PHPにて指定した期間内の合計日数を出力する方法

PHPにて開始日と終了日をユーザが入力すると、その期間内の合計日数を出力させたい ...

PHPで他サーバにFTP経由にてファイルをアップロードする方法
PHPで他サーバにFTP経由にてファイルをアップロードする方法

formで送信した内容をチェックした上で、他サーバにファイルをアップロードしたか ...