BETA

GuzzleでBasic認証

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

公式ドキュメントはきちんと読みましょう、という話ではあるのですが。

base64エンコードしたものを投げていて通らず、だいぶ後になってから気付いたのでメモ。

{  
    "name": "arm-band/basic_test",  
    "description": "",  
    "require": {  
        "guzzlehttp/guzzle": "^6.5.2",  
        "vlucas/phpdotenv": "^v4.1.0"  
    },  
    "scripts": {  
        "start": "php src/index.php"  
    }  
}  

こんな形でcomposer.jsonを用意してあげて、以下のようなディレクトリ構造とプロジェクトを作ります。

/  
├ src/  
|  └ index.php  
├ .env  
└ composer.json  

.envは以下のような形で。

TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
SECRET=YYYYYYYYYYYYYYYYYYYYYYYYYYYYY  

最後に、src/index.phpを用意。

<?php  
require __DIR__ . '/../vendor/autoload.php';  
use GuzzleHttp\Client;  
use Dotenv\Dotenv;  

$dot_env = __DIR__. '/../.env';  
if (is_readable($dot_env)) {  
    $dotenv = Dotenv::createImmutable(__DIR__. '/../');  
    $dotenv->load();  
}  

//処理  
function basic_authentication_request() {  
    $guzzleClient = new Client();  
    //URL  
    $base = 'https://example.jp/api';  

    try {  
        $response = $guzzleClient->request(  
            'POST',  
            $url,  
            [  
                'auth' => [  
                    getenv('TOKEN'),  
                    getenv('SECRET'),  
                ],  
                'version' => 1.1,  
                'json' => ['hoge' => ['piyo', 'fuga']],  
                'headers' => [  
                    'Content-Type' => 'application/vnd.json+api'  
                ],  
            ]  
        );  
        return json_decode($response->getBody()->getContents(), true);  
    } catch (Exception $e) {  
        return json_decode('{"res":' . unicode_encode($e->getResponse()->getBody()->getContents()) . ',' . $test_res . '}', true);  
    }  
}  

$response = basic_authentication_request();  

header("Content-type: application/json; charset=UTF-8");  

echo $response;  

GuzzleにはリクエストヘッダにBasic認証を行うためのauthというパラメータがあるため、これを使えば良いというオチでした。

これに気付かず、Authentication: Basic ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZという形をheadersに付けていました……。

参考

Guzzle

authパラメータ

base64エンコード(今回は最終的に不採用)

PHPでユニコードエスケープ(レスポンスがユニコードエスケープされたエラー文だと読めないので)

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

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

アルム=バンドのQrunch

よく一緒に読まれる記事

0件のコメント

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