/** * @param Gpf_Net_Http_Request $request * @return Gpf_Net_Http_Response */ private function executeWithSocketOpen(Gpf_Net_Http_Request $request) { $scheme = $request->getScheme() == 'ssl' || $request->getScheme() == 'https' ? 'ssl://' : ''; $proxySocket = @fsockopen($scheme . $request->getHost(), $request->getPort(), $errorNr, $errorMessage, self::CONNECTION_TIMEOUT); if ($proxySocket === false) { $gpfErrorMessage = $this->_sys('Could not connect to server: %s:%s, Failed with error: %s', $request->getHost(), $request->getPort(), $errorMessage); Gpf_Log::error($gpfErrorMessage); throw new Gpf_Exception($gpfErrorMessage); } $requestText = $request->toString(); $result = @fwrite($proxySocket, $requestText); if ($result === false || $result != strlen($requestText)) { @fclose($proxySocket); $gpfErrorMessage = $this->_sys('Could not send request to server %s:%s', $request->getHost(), $request->getPort()); Gpf_Log::error($gpfErrorMessage); throw new Gpf_Exception($gpfErrorMessage); } $result = ''; while (false === @feof($proxySocket)) { try { if (false === ($data = @fread($proxySocket, 8192))) { Gpf_Log::error($this->_sys('Could not read from proxy socket')); throw new Gpf_Exception("could not read from proxy socket"); } $result .= $data; } catch (Exception $e) { Gpf_Log::error($this->_sys('Proxy failed: %s', $e->getMessage())); @fclose($proxySocket); throw new Gpf_Exception($this->_('Proxy failed: %s', $e->getMessage())); } } @fclose($proxySocket); $response = new Gpf_Net_Http_Response(); $response->setResponseText($result); return $response; }