'; $port = 80; $username = ''; $password = ''; $mlsid = ''; $user_agent = 'CEL/1.8'; $login_uri = '/login/index.asp'; $search_uri = '/search/index.asp'; $rets_version = 'RETS/1.0'; $qop = ''; $nc = ''; $nonce = ''; $opaque = ''; $q_class = ''; $q_select = ',,etc'; $q_query = '(PROP_TYPE=\'\')'; $q_search_type = 'Property'; $q_format = 'COMPACT-DECODED'; $q_type = 'DMQL2'; $q_limit = 'NONE'; $q_count = '0'; /******************************************************************/ // A1/A2/resp is used in the RETS Authorization $A1 = md5($username.':'.$mlsid.':'.$password); $A2 = md5('GET:'.$login_uri); $resp = md5($A1.':'.$nonce.':'.$A2); // Request connection $out = 'GET '.$login_uri.' HTTP/1.1'."\r\n"; $out .= 'RETS-Version: '.$rets_version."\r\n"; $out .= 'Authorization: Digest username="'.$username.'", realm="'.$mlsid.'", nonce="'.$nonce.'", opaque="'.$opaque.'", uri="'.$login_uri.'", response="'.$resp.'"'." \r\n"; $out .= 'Host: '.$server.':'.$port."\r\n"; $out .= "Accept: */*\r\n"; $out .= 'User-Agent: '.$user_agent."\r\n"; $response = RETS_CONNECT($server, $port, $out); $cookie = extractText($response,'Set-Cookie: ',';'); $query = 'Class='.$q_class.'&Select='.$q_select.'&Query='.$q_query.'&SearchType='.$q_search_type.'&Format='.$q_format.'&QueryType='.$q_type.'&Limit='.$q_limit.'&Count='.$q_count; $uri = $search_uri.'?'.$query; $out = 'GET '.$uri." HTTP/1.1\r\n"; $out .= 'RETS-Version: '.$rets_version."\r\n"; $out .= 'Host: '.$server.':'.$port."\r\n"; $out .= "Accept: */*\r\n"; $out .= 'User-Agent: '.$user_agent."\r\n"; $out .= 'Cookie: '.$cookie."\r\n"; $response = RETS_CONNECT($server, $port, $out); echo $response; /* FUNCTIONS *******************************************************/ function RETS_CONNECT($server, $port, $out) { // This ensures that all connections are closed. $out .= "Connection: Close\r\n\r\n"; // Creates socket connection to the RETS server $fp = fsockopen($server,$port,$errno,$errstr,30); // IMPORTANT - This checks to make sure the socket connection is a valid socket connection // If this wasn't done, and the connection wasn't a valid resource it can send the script into // an endless loop and bomb the server if(!is_resource($fp)){ die(); } fputs($fp, $out); $response = ''; while (!feof($fp)) { $response .= fgets($fp, 128); } fclose($fp); return $response; } function extractText($content,$start,$end,$reverse=false) { if(strrpos($content,$start)===false) { return false; } $startpoint = ($reverse) ? strrpos($content,$start)+strlen($start) : strpos($content,$start)+strlen($start); $endpoint = strpos($content,$end,$startpoint); $length = $endpoint - $startpoint; return trim(substr($content,$startpoint,$length)); } /******************************************************************/ ?>