/** * Dispatches the value into the form encoded packet. * @param SimpleEncoding $encoding Form packet. * @access public */ function write($encoding) { $encoding->add($this->getName(), $this->getValue()); }
/** * Fetches a URL as a response object. Will keep trying if redirected. * It will also collect authentication realm information. * @param string/SimpleUrl $url Target to fetch. * @param SimpleEncoding $encoding Additional parameters for request. * @return SimpleHttpResponse Hopefully the target page. * @access public */ function fetchResponse($url, $encoding) { if ($encoding->getMethod() != 'POST') { $url->addRequestParameters($encoding); $encoding->clear(); } $response = $this->fetchWhileRedirected($url, $encoding); if ($headers = $response->getHeaders()) { if ($headers->isChallenge()) { $this->authenticator->addRealm($url, $headers->getAuthentication(), $headers->getRealm()); } } return $response; }
/** * Starts empty. * @param array $query Hash of parameters. * Multiple values are * as lists on a single key. * @access public */ function __construct($query = false) { if (is_array($query) and $this->hasMoreThanOneLevel($query)) { $query = $this->rewriteArrayWithMultipleLevels($query); } parent::__construct($query); }
/** * Renders the request body * @return Encoded entity body * @access protected */ protected function encode() { return $this->body ? $this->body : parent::encode(); }
/** * Sends the headers. * @param SimpleSocket $socket Open socket. * @param SimpleEncoding $encoding Content to send with request. * @access private */ protected function dispatchRequest($socket, $encoding) { foreach ($this->headers as $header_line) { $socket->write($header_line . "\r\n"); } if (count($this->cookies) > 0) { $socket->write("Cookie: " . implode(";", $this->cookies) . "\r\n"); } $encoding->writeHeadersTo($socket); $socket->write("\r\n"); $encoding->writeTo($socket); }
/** * Starts empty. * @param array $query Hash of parameters. * Multiple values are * as lists on a single key. * @access public */ function __construct($query = false) { parent::__construct($query); }
/** * @param SimpleUrl * @param SimpleEncoding * @return k_ActingAsSimpleHttpResponse */ protected function fetch(SimpleUrl $url, SimpleEncoding $parameters) { // extract primitives from SimpleTest abstractions $url_path = $url->getPath(); $url_query = array(); parse_str(str_replace('?', '', $url->getEncodedRequest()), $url_query); $method = $parameters->getMethod(); $data = array(); foreach ($parameters->getAll() as $pair) { $data[$pair->getKey()] = $pair->getValue(); } if (!in_array($url->getHost(), array("", $this->servername))) { return new k_ActingAsSimpleHttpResponse($url, $data, array("HTTP/1.1 502"), "External URL requested: " . $url->asString(), $method); } // set up a mocked environment $server = array('SERVER_NAME' => $this->servername, 'REQUEST_METHOD' => $method, 'REQUEST_URI' => $url_path); $headers = new k_VirtualHeaders(); $this->authenticator->addHeaders($headers, $url); foreach ($this->additional_headers as $line) { $headers->addHeaderLine($line); } $socket_buffer = new k_VirtualSocketBuffer(); $parameters->writeHeadersTo($socket_buffer); foreach ($socket_buffer->getLines() as $line) { $headers->addHeaderLine($line); } $superglobals = new k_adapter_MockGlobalsAccess($url_query, $data, $server, $headers->headers()); $response = k()->setContext(new k_HttpRequest("", null, $this->identity_loader, $this->language_loader, $this->translator_loader, $superglobals, $this->cookie_access, $this->session_access))->setComponentCreator($this->components)->setCharsetStrategy($this->charset_strategy)->run($this->root_class_name); $output = new k_SimpleOutputAccess(); $response->out($output); return $output->toSimpleHttpResponse($url, $data, $method); }