PHP学習記録 1回目 cURL


みなさんこんにちは。
コロナ禍の中、仕事の仕方が変わったり、仕事そのものを変えたと言う人もいるのではないかと思います。


私はと言うと、1年前に公務員から未経験のエンジニアとして転職し、今は在宅で日々ゴリゴリ、プログラムを書いています。


とはいえ、まだエンジニアとして働き始めて1年が経つだけで、まだまだ分からないことがたくさんあり、日々学習しております。


そんな私は1年前に、Tech AcademyのPHP/Laravelコースを受講して、受講後1カ月で、未経験エンジニアとして転職しました。2020年の8月に就職が決まったのですが、コロナであっても人手が必要な企業はけっこうあるようでした。


現役エンジニアから学ぶならテックアカデミー


転職してみて、オンラインで学んだことはもちろん基礎として必要な知識なのですが、実際の仕事では、オンラインで学べることは基礎中の基礎であることを痛感しております。


これからエンジニアを目指す人や、私と同様に駆け出しエンジニアの人のステップアップの指標になるように、また、私自身の備忘録のためにこのシリーズ形式で記事を書いて行ければと思います。


そんなこんなでタイトルにある学習記録をつけようとしているわけですが、1回目にcURLlときます…
順番は考えておりません。私が必要だと思った内容を気ままに書いていきます。

cURL


最近PHPでcurlを使って、APIリクエストを投げて、自社アプリと連携するといったことをやっています。


curlを使えば、PHPでHTTPリクエストによって外部サイトとの送受信ができるようになるというものです。
これによって、自社アプリでメールやSMSが送れるようになったり、他のウェブアプリの情報をもってこれたり、他のウェブアプリに情報を渡したりできるようになります。


最初はcURLって何?
何ができるの?わからない!!状態でした。


上司から、「この機能を使いたいからcurl投げて、動作確認してみて」と言われ、咄嗟に「はい、わかりました!」って言ってしまったことがありました。


わからないことは素直に聞かなきゃいけないと思いますが、「curlも知らないで転職したの?」と言われてしまうのが怖くて聞けなかったです…


さて、そんなcURL、今はなんとなく使い方が分かってきたのですが、まだまだ分からないことも多く、使い方を整理しておかないとすぐ忘れそうなので記録しておきます。。


さて、cURLですが、これを用いてHTTPリクエストすることで、他のウェブサイトやウェブアプリの情報を取得できるようになります。


そもそもHTTPリクエストは、クライアントがウェブサーバにリクエストを要求することです。
それに対してウェブサーバが対応する情報をクライアントに送信することをHTTPレスポンスと言います。


cURLの使い方は大まかに4つの順番で記載します。

  1. curlセッションの初期化
  2. curlオプションの設定
  3. curlの実行
  4. curlセッションの終了


cURLの使い方(GETメソッド)


cURLは次の手順で使用します。
これを実行すると、example.comのページをウェブブラウザで表示します。

<?php
    //curlセッションの初期化
    $ch = curl_init();

    //curlオプションの設定
    curl_setopt($ch, CURLOPT_URL, "test.com");
    crul_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    //curlの実行
    $output = curl_exec($ch);
    var_dump($output);

    //curlセッションの終了
    curl_close()$ch;

?>

それぞれの行で記されているものを説明します。


最初に記載のあるcurl_init()
これは、新規セッションを初期化し、cURLハンドルを返します。

$ch = curl_init();


次に出てくるcurl_setopt(*******)
これは、指定したcURLセッションハンドルのオプションを設定します。


ここでは、「CURLOPT_URL」と記載しています。
これは、取得するURLを指定しています。
example.comというURLから情報を取得するために、URLをここで設定します。

curl_setopt($ch, CURLOPT_URL, "examplepage.com");


このcurl_setoptの「CURLOPT_URL」を記載した箇所には、その他、様々なオプションを指定することができます。


この必要に応じて、curl_setoptを記載することで欲しい形の情報を取得できるようになります。


次に記載しているcurl_setoptには、「CURLOPT_RETURNTRANSFER」と記載しています。
これは,第3引数に1(true)を指定することで、この後に出てくるcurl_exec()の返り値を文字列で返してくれるようになります。


このCURLOPT_RETURNTRANSFERをtrueにすることで、実行結果が文字列となるので、実行結果を変数に保存することが可能となります。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);


そして、curl_exec()
これによって、cURLが実行されます。

$output = curl_exec($ch);


最後に、curl_close()
これによってcurlセッションが終了します。

curl_close($ch)


cURLの使い方(POSTメソッド)


cURLの使い方は、GETメソッドの他にPOSTメソッドがあります。
これはHTTPリクエストをする際に、テキストやバイナリデータをパラメータに持たせることができます。


<?php

    //curlセッションを初期化
    $ch = curl_init();

    //データを用意
    $data = array('name' => 'harumaki');

    //curlオプションを設定
    curl_setopt($ch, CURLOPT_URL, "examplepage.com");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

    //curlの実行
    $output = curl_exec($ch);
    var_dump($output);

    //curlセッションの終了
    curl_close()$ch;

?>


GETメソッドの時と流れは同じですが、POSTメソッドを使うにはcurlオプションを追加します。


まず「CURLOPT_POST」を記載しています。
これは、trueにすることでPOSTが可能となります。

curl_setopt($ch, CURLOPT_POST, true);


次に、「CURLOPT_POSTFIELDS」を記載しています。
ここで、先に設定しておいた$dataを持たせることで、POSTメソッドでデータの送信の準備が整います。

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);


あとは、GETメソッドと同じですが、curl_setoptで設定できるオプションはかなり豊富です。
必要に応じてcurl_setoptを記載していくのですが、どういう時にどういうものが必要なのかは、私もトライ&エラーで日々勉強しております。