123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- <?php
- /*
- * $Id: HttpRequestTask.php 905 2010-10-05 16:28:03Z mrook $
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This software consists of voluntary contributions made by many individuals
- * and is licensed under the LGPL. For more information please see
- * <http://phing.info>.
- */
- require_once 'phing/Task.php';
- /**
- * A HTTP request task.
- * Making an HTTP request and try to match the response against an provided
- * regular expression.
- *
- * @package phing.tasks.ext
- * @author Benjamin Schultz <bschultz@proqrent.de>
- * @version $Id: HttpRequestTask.php 905 2010-10-05 16:28:03Z mrook $
- * @since 2.4.1
- */
- class HttpRequestTask extends Task
- {
- /**
- * Holds the request URL
- *
- * @var string
- */
- protected $_url = null;
- /**
- * Holds the regular expression that should match the response
- *
- * @var string
- */
- protected $_responseRegex = '';
- /**
- * Whether to enable detailed logging
- *
- * @var boolean
- */
- protected $_verbose = false;
- /**
- * Holds additional header data
- *
- * @var array<Parameter>
- */
- protected $_headers = array();
- /**
- * Holds additional config data for HTTP_Request2
- *
- * @var array<Parameter>
- */
- protected $_configData = array();
- /**
- * Holds the authentication user name
- *
- * @var string
- */
- protected $_authUser = null;
- /**
- * Holds the authentication password
- *
- * @var string
- */
- protected $_authPassword = '';
- /**
- * Holds the authentication scheme
- *
- * @var string
- */
- protected $_authScheme;
- /**
- * Holds the events that will be logged
- *
- * @var array<string>
- */
- protected $_observerEvents = array(
- 'connect',
- 'sentHeaders',
- 'sentBodyPart',
- 'receivedHeaders',
- 'receivedBody',
- 'disconnect',
- );
- /**
- * Sets the request URL
- *
- * @param string $url
- */
- public function setUrl($url)
- {
- $this->_url = $url;
- }
- /**
- * Sets the response regex
- *
- * @param string $regex
- */
- public function setResponseRegex($regex)
- {
- $this->_responseRegex = $regex;
- }
- /**
- * Sets the authentication user name
- *
- * @param string $user
- */
- public function setAuthUser($user)
- {
- $this->_authUser = $user;
- }
- /**
- * Sets the authentication password
- *
- * @param string $password
- */
- public function setAuthPassword($password)
- {
- $this->_authPassword = $password;
- }
- /**
- * Sets the authentication scheme
- *
- * @param string $scheme
- */
- public function setAuthScheme($scheme)
- {
- $this->_authScheme = $scheme;
- }
- /**
- * Sets whether to enable detailed logging
- *
- * @param boolean $verbose
- */
- public function setVerbose($verbose)
- {
- $this->_verbose = StringHelper::booleanValue($verbose);
- }
- /**
- * Sets a list of observer events that will be logged
- * if verbose output is enabled.
- *
- * @param string $observerEvents List of observer events
- *
- * @return void
- */
- public function setObserverEvents($observerEvents)
- {
- $this->_observerEvents = array();
- $token = ' ,;';
- $ext = strtok($observerEvents, $token);
- while ($ext !== false) {
- $this->_observerEvents[] = $ext;
- $ext = strtok($token);
- }
- }
- /**
- * Creates an additional header for this task
- *
- * @return Parameter The created header
- */
- public function createHeader()
- {
- $num = array_push($this->_headers, new Parameter());
- return $this->_headers[$num-1];
- }
- /**
- * Creates a config parameter for this task
- *
- * @return Parameter The created parameter
- */
- public function createConfig()
- {
- $num = array_push($this->_configData, new Parameter());
- return $this->_configData[$num-1];
- }
- /**
- * Load the necessary environment for running this task.
- *
- * @throws BuildException
- */
- public function init()
- {
- @include_once 'HTTP/Request2.php';
- if (! class_exists('HTTP_Request2')) {
- throw new BuildException(
- 'HttpRequestTask depends on HTTP_Request2 being installed '
- . 'and on include_path.',
- $this->getLocation()
- );
- }
- $this->_authScheme = HTTP_Request2::AUTH_BASIC;
- // Other dependencies that should only be loaded
- // when class is actually used
- require_once 'HTTP/Request2/Observer/Log.php';
- }
- /**
- * Make the http request
- */
- public function main()
- {
- if (!isset($this->_url)) {
- throw new BuildException("Missing attribute 'url' set");
- }
- $request = new HTTP_Request2($this->_url);
- // set the authentication data
- if (!empty($this->_authUser)) {
- $request->setAuth(
- $this->_authUser,
- $this->_authPassword,
- $this->_authScheme
- );
- }
- foreach ($this->_configData as $config) {
- $request->setConfig($config->getName(), $config->getValue());
- }
- foreach ($this->_headers as $header) {
- $request->setHeader($header->getName(), $header->getValue());
- }
- if ($this->_verbose) {
- $observer = new HTTP_Request2_Observer_Log();
- // set the events we want to log
- $observer->events = $this->_observerEvents;
- $request->attach($observer);
- }
- $response = $request->send();
- if ($this->_responseRegex !== '') {
- $matches = array();
- preg_match($this->_responseRegex, $response->getBody(), $matches);
- if (count($matches) === 0) {
- throw new BuildException(
- 'The received response body did not match the '
- . 'given regular expression'
- );
- } else {
- $this->log('The response body matched the provided regex.');
- }
- }
- }
- }
|