最近プロジェクトに取り組んでいたとき、バックエンドは準備できましたが、フロントエンドのテンプレートがまだ利用できないため、テストの方が面倒でした。そこで、curl を介したフォーム送信をシミュレートする簡単なスクリプトを作成しました。データは配列と文字列の 2 つの方法で送信できます。
- /**
- * Class SimulantForm シミュレーション フォーム
- */
- class SimulantForm {
- /**
- * @var 送信するページのURL
- */
- protected $_url;
- /**
- * @var resourcecurl_init()によって返されるcurlハンドル
- */
- protected $_ch ;
- /**
- * フォームを初期化します
- * @param $_url URL
- */
- public function __construct($_url) {
- $this->gt;_ch =curl_init();
- $this->setUrl($_url);
- curl_setopt($this- >_ch, CURLOPT_RETURNTRANSFER, 1);
- }
-
- /**
- *getメソッド経由で送信
- * @param配列|文字列フォームデータ
- * @returnmixed
- */
- public function get($_data = '') {
- $this->_url .= $this->_setGetData($ _data);
- $this->setUrl($this->_url);
- $result =curl_exec($this->_ch);
- curl_close($this->_ch);
- return $result;
- }
-
- /**
- * 投稿経由で送信
- * @param array|string form data
- * @returnmixed
- */
- public function post($_data) {
- curl_setopt($this->_ch, CURLOPT_POST, 1);
- $this->_setPostData($_data);
- $result =curl_exec($this->_ch);
- curl_close($this->_ch);
- return $result;
- }
-
- /**
- * エラーメッセージを返す
- * @return array array[0]: エラー番号、array[1]: エラーメッセージ
- */
- public function getLastError() {
- return array( curl_errno($this->_ch)、curl_error($this->_ch));
- }
-
- /**
- * SETOPT_COOKIEFILE を設定します
- * @param string $_cookieFile ファイルの実際のパス
- */
- public function setCookieFile($_cookieFile) {
- curl_setopt($this-> _ch, CURLOPT_COOKIEFILE, $_cookieFile);
- }
-
- /**
- * SETOPT_COOKIEJAR を設定します
- * @param string $_cookieFile ファイルの実際のパス
- */
- public function setCookieJar($_cookieFile) {
- curl_setopt($this->_ch, CURLOPT_COOKIEJAR, $_cookieFile);
- }
-
- / **
- * URLを設定します
- * @param $_url
- */
- 保護関数 setUrl($_url) {
- $this->_url = $_url;
- curl_setopt($this->_ch, CURLOPT_URL, $_url);
- }
-
- /**
- * getモードで送信するときにデータを設定します
- * @param $_get_data 文字列または配列
- * @returnmixed
- */
- 保護された関数 _setGetData($_get_data) {
- if(is_array($_get_data)) {
- return $this->_getDataToString($_get_data);
- } elseif(is_string($_get_data)) {
- return $_get_data;
- }
- }
-
- /**
- * 投稿モードで送信するときにデータを設定します
- * @param array|string $_post_data
- */
- protected function _setPostData ($_post_data) {
- curl_setopt($this->_ch, CURLOPT_POSTFIELDS, $_post_data);
- }
-
- /**
- * 配列形式で送信された情報を get メソッド経由で送信するための文字列に解析します
- * @param array $_get_data
- * @return string
- */
- protected function _getDataToString(array $_get_data) {
- return '?' . http_build_query($_get_data); //1階を参照、http_build_query関数に置き換えると、oschinaの編集機能が本当にひどいです。
- }
- }
コードをコピー
|