Answer a proxy-authenticated service handler.
public static getProxiedService ( string $type ) : CAS_ProxiedService | ||
$type | string | The service type. One of PHPCAS_PROXIED_SERVICE_HTTP_GET; PHPCAS_PROXIED_SERVICE_HTTP_POST; PHPCAS_PROXIED_SERVICE_IMAP |
Результат | CAS_ProxiedService |
/** * Retrieves the data using the given url. The default implementation uses the file_get_content() * function to retrieve the request. Subclasses would need to implement this if a simple GET request * is not sufficient (i.e. you need POST or custom headers). * @param string the url to retrieve * @return string the response from the server * @TODO support POST requests and custom headers and perhaps proxy requests */ protected function retrieveData($url) { if ($this->debugMode) { error_log(sprintf(__CLASS__ . " Retrieving %s", $url)); } try { if ($this->method == 'GET') { $http = phpCAS::getProxiedService(PHPCAS_PROXIED_SERVICE_HTTP_GET); } else { if ($this->method = 'POST') { $http = phpCAS::getProxiedService(PHPCAS_PROXIED_SERVICE_HTTP_POST); } else { throw new Exception('Unsupported HTTP method ' . $this->method); } } $http->setUrl($url); // Not yet supported in phpCAS-1.2.2, will be added in a future version. // foreach ($this->getHeaders() as $header) { // $http->addRequestHeader($header); // } $http->send(); $this->response = DataResponse::factory('HTTPDataResponse', array()); $this->response->setRequest($this->method, $url, $this->filters, $this->requestHeaders); $this->response->setResponse($http->getResponseBody(), $http->getResponseHeaders()); if ($this->debugMode) { error_log(sprintf(__CLASS__ . " Returned status %d and %d bytes", $this->getResponseCode(), strlen($data))); } return $http->getResponseBody(); } catch (CAS_ProxyTicketException $e) { if ($this->debugMode) { error_log(__CLASS__ . " The user's proxy ticket expired, prompt for login."); } // For now we will just re-throw the exception and let the WebModule that // is calling us handle prompting for re-authentication. throw $e; } }
<?php require 'script_info.php'; ?> <p>the user's login is <b><?php echo phpCAS::getUser(); ?> </b>.</p> <h2>Response from service <?php echo $serviceUrl; ?> </h2> <?php flush(); // call a service and change the color depending on the result try { $service = phpCAS::getProxiedService(PHPCAS_PROXIED_SERVICE_HTTP_POST); $service->setUrl($serviceUrl); $service->setContentType('application/x-www-form-urlencoded'); $service->setBody('favorite_color=blue'); $service->send(); if ($service->getResponseStatusCode() == 200) { echo '<div class="success">'; echo $service->getResponseBody(); echo '</div>'; } else { // The service responded with an error code 404, 500, etc. echo '<div class="error">'; echo 'The service responded with a ' . $service->getResponseStatusCode() . ' error.'; echo $service->getResponseBody(); echo '</div>'; }