BETA

Guzzleで任意のURLにリクエストを投げるPHPスクリプトを作る

投稿日:2020-04-02
最終更新:2020-04-02

任意のURLにGETやPOSTのリクエストを投げつけるスクリプトが欲しくなったので自作しました。

やりたいことは以下の通り。

  • 任意のURLにGETやPOSTリクエストを投げる
  • cronで自動実行する
  • シェルスクリプトはできれば避けたい
  • URLとメソッドは引数で渡したい

有り体に言うと「cURLだけで良いのでは?」という感じではあるのですが、一応PHPで作ってみました。

やることはシンプルなのでGuzzleを使ってサクッと済ませます。

    "require": {  
        "guzzlehttp/guzzle": "6.5.2"  
    }  

composer.jsonrequireにGuzzleを指定して……。

<?php  
require __DIR__ . '/vendor/autoload.php';  

use GuzzleHttp\Client;  

$url = $argv[1];  
$method = $argv[2];  

try {  
    $guzzleClient = new Client();  
    $response = $guzzleClient->request(  
        $method,  
        $url,  
        [  
            'headers' => [  
                'Content-Type' => 'application/vnd.json+api',  
            ],  
            'verify' => false //SSL error avoid  
        ]  
    );  
} catch( Exception $e ) {  
    echo $e->getMessage() . ': リクエストの送信に失敗しました。';  
    exit( 0 );  
}  

こんな感じのスクリプトを作成。実際は引数のバリデーション等も実施しているのでもう少し記述がありますが。

なお、今回の新規事項は引数を使用していること。

$url = $argv[1];  
$method = $argv[2];  

ここの部分がそうですね。$argv[0]はコマンドラインで指定したphpのファイル名が入るとのことなので、実際の引数は$argv[1]からになります。

また、引数の個数をチェックするには$argcという変数を使用すればよいとのこと。

//引数を2つ受け付ける場合  
if( $argc !== 3 ) {  
    echo 'error!';  
    exit( 0 );  
}  

例えばこんな感じの書き方でチェックできます。

それから、細かいところでは今回の事情によりGuzzleへ渡すパラメータでSSL証明書の検証をオフにする指定を行っています。

今回はcronからの実行なので外部からはアクセスできないようにします。方法はいくつかありますが、そもそも公開領域に置かなければ良いですね。

ケースによっては.htaccessdeny from allを書いておく、というのもありですかね?できれば公開領域外に置いておきたいですが。

10 8,20 * * * root php /PATH/TO/SCRIPT/trigger.php https://example.com/resoure/path/sample GET  

最後にcronでphpを実行するようにしておけば良いと思います。上記の例では毎日8:10と20:10にtrigger.php(上述のスクリプトの仮名)を実行、リクエストを投げ付ける先はhttps://example.com/resoure/path/sample、メソッドはGET、という具合です。

参考

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

アルム=バンドのQrunch

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう