public function Sign() { global $APPLICATION; if ($this->secret_id === false) { $dbr_member = CControllerMember::GetByGuid($this->member_id); $ar_member = $dbr_member->Fetch(); if (!$ar_member) { $e = new CApplicationException("Bad member_id: " . $this->member_id . ""); $APPLICATION->ThrowException($e); return false; } $this->secret_id = $ar_member["SECRET_ID"]; } return parent::Sign(); }
function Send($url, $page) { $server_port = 80; $server_name = strtolower(trim($url, "/ \r\n\t")); if (substr($server_name, 0, 7) == 'http://') { $server_name = substr($server_name, 7); } elseif (substr($server_name, 0, 8) == 'https://') { $server_name = substr($server_name, 8); $server_port = 443; } if (preg_match('/.+:([0-9]+)$/', $server_name, $matches)) { $server_port = $matches[1]; $server_name = substr($server_name, 0, 0 - strlen($server_port) - 1); } $proxy_url = COption::GetOptionString("main", "controller_proxy_url", ""); $proxy_port = COption::GetOptionString("main", "controller_proxy_port", ""); $proxy_user = COption::GetOptionString("main", "controller_proxy_user", ""); $proxy_password = COption::GetOptionString("main", "controller_proxy_password", ""); // соединяемся с удаленным сервером $bUseProxy = strlen($proxy_url) > 0 && strlen($proxy_port) > 0; if ($bUseProxy) { $proxy_port = intval($proxy_port); if ($proxy_port <= 0) { $proxy_port = 80; } $requestIP = $proxy_url; $requestPort = $proxy_port; } else { $requestIP = $server_name; $requestPort = $server_port; } $conn = @fsockopen(($requestPort == 443 ? 'ssl://' : '') . $requestIP, $requestPort, $errno, $errstr, 30); if (!$conn) { $this->Debug("We can't send request to the {$server_name}:{$server_port} from member#" . $this->member_id . "(" . $this->secret_id . "):\r\n" . $strError); $strError = GetMessage("MAIN_CMEMBER_ERR5") . $server_name . ":" . $server_port . " (" . $errstr . ")"; if (is_object($GLOBALS["APPLICATION"])) { $e = new CApplicationException(htmlspecialcharsex($strError)); $GLOBALS["APPLICATION"]->ThrowException($e); } return false; } $strVars = $this->MakeRequestString(); // запускаем, получаем результат if ($bUseProxy) { $strRequest = "POST http://" . $server_name . ":" . $server_port . $page . " HTTP/1.0\r\n"; if (strlen($proxy_user) > 0) { $strRequest .= "Proxy-Authorization: Basic " . base64_encode($proxy_user . ":" . $proxy_password) . "\r\n"; } } else { $strRequest = "POST " . $page . " HTTP/1.0\r\n"; } $strRequest .= "User-Agent: BitrixControllerMember\r\n"; $strRequest .= "Accept: */*\r\n"; $strRequest .= "Host: " . $server_name . "\r\n"; $strRequest .= "Accept-Language: en\r\n"; $strRequest .= "Content-type: application/x-www-form-urlencoded\r\n"; $strRequest .= "Content-length: " . strlen($strVars) . "\r\n\r\n"; $strRequest .= $strVars . "\r\n"; $this->Debug("We send request to the {$server_name}:{$server_port} from member#" . $this->member_id . "(" . $this->secret_id . "):\r\n" . "Packet:" . print_r($this, true) . "\r\n" . "{$strVars}\r\n"); fputs($conn, $strRequest); $header = ''; while (($line = fgets($conn, 4096)) && $line != "\r\n") { $header .= $line; } $result = ''; while ($line = fread($conn, 4096)) { $result .= $line; } fclose($conn); $ar_result = array(); $packet_result = new __CControllerPacketResponse(); $packet_result->secret_id = $this->secret_id; $packet_result->ParseResult($result); $this->Debug("We get response from {$server_name}:{$server_port} to member#" . $packet_result->member_id . "(" . $this->secret_id . "):\r\n" . "Packet (security check " . ($packet_result->Check() ? "passed" : "failed") . "): " . print_r($packet_result, true) . "\r\n" . $result . "\r\n"); return $packet_result; }
public static function Send() { //AddMessage2Log(print_r($this, true)); parent::Send(); }