public function fetchRequest(RemoteContentRequest $request) { $outHeaders = array(); if ($request->hasHeaders()) { $headers = explode("\n", $request->getHeaders()); foreach ($headers as $header) { if (strpos($header, ':')) { $key = trim(substr($header, 0, strpos($header, ':'))); $val = trim(substr($header, strpos($header, ':') + 1)); if (strcmp($key, "User-Agent") != 0 && strcasecmp($key, "Transfer-Encoding") != 0 && strcasecmp($key, "Cache-Control") != 0 && strcasecmp($key, "Expries") != 0 && strcasecmp($key, "Content-Length") != 0) { $outHeaders[$key] = $val; } } } } $outHeaders['User-Agent'] = "Shindig PHP"; $options = array(); $options['timeout'] = Shindig_Config::get('curl_connection_timeout'); // configure proxy $proxyUrl = Shindig_Config::get('proxy'); if (!empty($proxyUrl)) { $options['adapter'] = 'Zend_Http_Client_Adapter_Proxy'; $proxy = parse_url($proxyUrl); if (isset($proxy['host'])) { $options['proxy_host'] = $proxy['host']; } if (isset($proxy['port'])) { $options['proxy_port'] = $proxy['port']; } if (isset($proxy['user'])) { $options['proxy_user'] = $proxy['user']; } if (isset($proxy['pass'])) { $options['proxy_pass'] = $proxy['pass']; } } $client = new Zend_Http_Client(); $client->setConfig($options); $client->setUri($request->getUrl()); $client->setHeaders($outHeaders); if ($request->getContentType()) { $client->setHeaders(Zend_Http_Client::CONTENT_TYPE, $request->getContentType()); } if ($request->isPost()) { $client->setMethod(Zend_Http_Client::POST); $client->setRawData($request->getPostBody()); } else { $client->setMethod(Zend_Http_Client::GET); } $response = $client->request(); $request->setHttpCode($response->getStatus()); $request->setContentType($response->getHeader('Content-Type')); $request->setResponseHeaders($response->getHeaders()); $request->setResponseContent($response->getBody()); $request->setResponseSize(strlen($response->getBody())); return $request; }
/** * Sets the headers and post body for the request if they are specified * * @param RemoteContentRequest $request */ private function setHeaders(RemoteContentRequest $request) { if ($request->hasHeaders()) { $headers = explode("\n", $request->getHeaders()); $outHeaders = array(); foreach ($headers as $header) { if (strpos($header, ':')) { $key = trim(substr($header, 0, strpos($header, ':'))); $key = str_replace(' ', '-', ucwords(str_replace('-', ' ', $key))); $val = trim(substr($header, strpos($header, ':') + 1)); if (!in_array($key, $this->disallowedHeaders)) { $outHeaders[] = "{$key}: {$val}"; } } } $outHeaders[] = "User-Agent: " . BasicRemoteContentFetcher::USER_AGENT; curl_setopt($request->handle, CURLOPT_HTTPHEADER, $outHeaders); } $method = $request->getMethod(); if ($request->isPost()) { curl_setopt($request->handle, CURLOPT_POST, 1); curl_setopt($request->handle, CURLOPT_POSTFIELDS, $request->getPostBody()); } else { if ($method == 'DELETE' || $method == 'HEAD' || $method == 'PUT') { curl_setopt($request->handle, CURLOPT_CUSTOMREQUEST, $method); if ($method == "PUT") { curl_setopt($request->handle, CURLOPT_POSTFIELDS, $request->getPostBody()); } } } }