Ring Ring, I pick up the phone and hear "I need to put my real estate properties on my website, can you do this. I do not want to input them twice, once in the MLS and again on your our own site." 'Sure,' I say, and hang up the phone. Now what. After hours of trying to parse through an MLS listing on the internet with unsuccessful results I stumble upon RETS.
What is this? Well it is a standard that all companies offering MLS listings online must comply with. It is basically a way to query their data base of property listings and receive text or xml output to parse through and place into a database. It is a very easy and fast system with up to date information, if you can figure out the log on process.
You will first need to contact your local RETS/MLS and get a username and password that will get you access into the RETS system. You may even need to get your client who will have to be a real estate agent using the local MLS to call and verify that you need access. The RETS is usually a free system and is supposed to allow the sharing of information freely to sell properties faster to a greater audience. Ever wonder how companies like homefind.com and realtor.org get the listings? One word... RETS.
Some RETS systems use a basic authentication, which is like that gray popup box which pops up on secure directory, which of course is easy to enter into. But on the whole these systems use a Digest Authorization process. This process of logging and establishing a session is a lot more secure and more difficult to crack. This article will discuss the basics of establishing a connection to this type of server.
Hang on for a quick ride into the world of digest and MD5!
Breaking Down The Code
This is the URL of the RETS server.
$url2 = "retslive.mls.com";

Open a connection using fsocket. This is a standard connection script.
$fp2 = fsockopen($url2,80,$errno,$errstr,30);

Create your parts that will be used by MD5. A1 consists of your "username:mlsid:password" you will have to get these from your local MLS office.
$A1 = "YOYO:sdmls:GRABB";

A2 consists of the GET of the login page. You may have to get this information from the RETS/MLS company that you are trying to use. Sometimes they do not place this information on the internet, you may have to call or email the company.
$A2 = "GET:/IMPV/rets/rets_login.asp";

"Nonce" and 'Opaque' is a sting of characters the RETS server will spit out if you go to the page without logging in. You will need to get this, either going to it manually or writing a script. Use Fsocket open to view the headers to get this information and parse through it.
$auth_nonce = "$nonce";
$auth_opaque = '$opaque';
Now let us do some encrypting using MD5 of the above parts. This is pretty straight forward and pretty standard and is well documented in the manual.
http://www.rets.org/developer/retsReference1.0.1.zip
$raw_digest = md5($A1).":".$auth_nonce.":".md5($A2);

Next we will encrypt the above part.
$resp = md5( $raw_digest );

Now that we have the encryption completed, we login. Following are the headers. Again, these are pretty standard but they may vary slightly from one RETS server to another.
Here is the initial GET statement.
$out2 = "GET /IMPV/rets/rets_login.asp\r\n";

And the Authorization method.
$out2 .= "Authorization: Digest username=\"$username\", realm=\"$mlsid\", nonce=\"$auth_nonce\", opaque=\"$auth_opaque\", uri=\"/IMPV/rets/rets_login.asp\", response=\"$resp\" \r\n";

The host is just your server ip address that is running this code.
$out2 .= "Host: 63.175.244.266\r\n";

Accept is the type of documents that you want. Below is set to any and all.
$out2 .= "Accept: */*\r\n";

Your user agent is important. You will need to come up with a name for your code and register it with the RETS/MLS company.
$out2 .="User-Agent: RETSLOGGER/1.0\r\n";

Close the connection.
$out2 .= "Connection: Close\r\n\r\n";

This statement will send the headers we have above.
fputs($fp2, $out2);

Now, we will create a loop statement to return all information returned from the RETS server.
               
while (!feof($fp2)) 
{      
	$grabo = fgets($fp2, 128);  
	print $grabo;
}
Run the code and if you log in successfully you will receive a session-cookie, this small line of characters and numbers is a huge reward for your perseverance and countless hours of keystrokes. You will also receive other page links that will give you access to searches and other information.
This should help you get started in the wonderful world of RETS which is a great system and can be used in many ways once you get over the hurdle of logging in.
Ron Goff