<?php
/*
 * test_http.php
 *
 * @(#) $Header: /opt2/ena/metal/http/test_http.php,v 1.19 2011/01/27 02:18:18 mlemos Exp $
 *
 */

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Test for Manuel Lemos' PHP HTTP class</TITLE>
</HEAD>
<BODY>
<H1 align="center">Test for Manuel Lemos' PHP HTTP class</H1>
<HR>
<UL>
<?php
	require("http.php");

	/* Uncomment the line below when accessing Web servers or proxies that
	 * require authentication.
	 */
	/*
	require("sasl.php");
	*/

	set_time_limit(0);
	$http=new http_class;

	/* Connection timeout */
	$http->timeout=0;

	/* Data transfer timeout */
	$http->data_timeout=0;

	/* Output debugging information about the progress of the connection */
	$http->debug=1;

	/* Format dubug output to display with HTML pages */
	$http->html_debug=1;


	/*
	 *  Need to emulate a certain browser user agent?
	 *  Set the user agent this way:
	 */
	$http->user_agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";

	/*
	 *  If you want to the class to follow the URL of redirect responses
	 *  set this variable to 1.
	 */
	$http->follow_redirect=1;

	/*
	 *  How many consecutive redirected requests the class should follow.
	 */
	$http->redirection_limit=5;

	/*
	 *  If your DNS always resolves non-existing domains to a default IP
	 *  address to force the redirection to a given page, specify the
	 *  default IP address in this variable to make the class handle it
	 *  as when domain resolution fails.
	 */
	$http->exclude_address="";

	/*
	 *  If you want to establish SSL connections and you do not want the
	 *  class to use the CURL library, set this variable to 0 .
	 */
	$http->prefer_curl=0;

	/*
	 *  If basic authentication is required, specify the user name and
	 *  password in these variables.
	 */

	$user="";
	$password="";
	$realm="";       /* Authentication realm or domain      */
	$workstation=""; /* Workstation for NTLM authentication */
	$authentication=(strlen($user) ? UrlEncode($user).":".UrlEncode($password)."@" : "");

/*
	Do you want to access a page via SSL?
	Just specify the https:// URL.
	$url="https://www.openssl.org/";
*/

	$url="http://".$authentication."www.php.net/";

	/*
	 *  Generate a list of arguments for opening a connection and make an
	 *  HTTP request from a given URL.
	 */
	$error=$http->GetRequestArguments($url,$arguments);

	if(strlen($realm))
		$arguments["AuthRealm"]=$realm;

	if(strlen($workstation))
		$arguments["AuthWorkstation"]=$workstation;

	$http->authentication_mechanism=""; // force a given authentication mechanism;

	/*
	 *  If you need to access a site using a proxy server, use these
	 *  arguments to set the proxy host and authentication credentials if
	 *  necessary.
	 */
	/*
	$arguments["ProxyHostName"]="127.0.0.1";
	$arguments["ProxyHostPort"]=3128;
	$arguments["ProxyUser"]="proxyuser";
	$arguments["ProxyPassword"]="proxypassword";
	$arguments["ProxyRealm"]="proxyrealm";  // Proxy authentication realm or domain
	$arguments["ProxyWorkstation"]="proxyrealm"; // Workstation for NTLM proxy authentication
	$http->proxy_authentication_mechanism=""; // force a given proxy authentication mechanism;
	*/

	/*
	 *  If you need to access a site using a SOCKS server, use these
	 *  arguments to set the SOCKS host and port.
	 */
	/*
	$arguments["SOCKSHostName"]='127.0.0.1';
	$arguments["SOCKSHostPort"]=1080;
	$arguments["SOCKSVersion"]='5';
	*/

	/* Set additional request headers */
	$arguments["Headers"]["Pragma"]="nocache";
/*
	Is it necessary to specify a certificate to access a page via SSL?
	Specify the certificate file this way.
	$arguments["SSLCertificateFile"]="my_certificate_file.pem";
	$arguments["SSLCertificatePassword"]="some certificate password";
*/

/*
	Is it necessary to preset some cookies?
	Just use the SetCookie function to set each cookie this way:

	$cookie_name="LAST_LANG";
	$cookie_value="de";
	$cookie_expires="2010-01-01 00:00:00"; // "" for session cookies
	$cookie_uri_path="/";
	$cookie_domain=".php.net";
	$cookie_secure=0; // 1 for SSL only cookies
	$http->SetCookie($cookie_name, $cookie_value, $cookie_expiry, $cookie_uri_path, $cookie_domain, $cookie_secure);
*/


	echo "<LI><H2>Opening connection to:</H2>\n<P><TT>",HtmlSpecialChars($arguments["HostName"]),"</TT></P>\n";
	flush();
	$error=$http->Open($arguments);
	echo "</LI>\n";

	if($error=="")
	{
		echo "<LI><H2>Sending request for page:</H2>\n<P><TT>";
		echo HtmlSpecialChars($arguments["RequestURI"]),"\n";
		if(strlen($user))
			echo "\nLogin:    ",$user,"\nPassword: ",str_repeat("*",strlen($password));
		echo "</TT></P>\n";
		flush();
		$error=$http->SendRequest($arguments);
		echo "</LI>\n";

		if($error=="")
		{
			echo "<LI><H2>Request:</H2>\n<PRE>\n".HtmlSpecialChars($http->request)."</PRE></LI>\n";
			echo "<LI><H2>Request headers:</H2>\n<PRE>\n";
			for(Reset($http->request_headers),$header=0;$header<count($http->request_headers);Next($http->request_headers),$header++)
			{
				$header_name=Key($http->request_headers);
				if(GetType($http->request_headers[$header_name])=="array")
				{
					for($header_value=0;$header_value<count($http->request_headers[$header_name]);$header_value++)
						echo $header_name.": ".$http->request_headers[$header_name][$header_value],"\r\n";
				}
				else
					echo $header_name.": ".$http->request_headers[$header_name],"\r\n";
			}
			echo "</PRE>\n";
			flush();

			$headers=array();
			$error=$http->ReadReplyHeaders($headers);
			echo "</LI>\n";
			if($error=="")
			{
				echo "<LI><H2>Response status code:</H2>\n<P>".$http->response_status;
				switch($http->response_status)
				{
					case "301":
					case "302":
					case "303":
					case "307":
						echo " (redirect to <TT>".$headers["location"]."</TT>)<BR>\nSet the <TT>follow_redirect</TT> variable to handle redirect responses automatically.";
						break;
				}
				echo "</P></LI>\n";
				echo "<LI><H2>Response headers:</H2>\n<PRE>\n";
				for(Reset($headers),$header=0;$header<count($headers);Next($headers),$header++)
				{
					$header_name=Key($headers);
					if(GetType($headers[$header_name])=="array")
					{
						for($header_value=0;$header_value<count($headers[$header_name]);$header_value++)
							echo $header_name.": ".$headers[$header_name][$header_value],"\r\n";
					}
					else
						echo $header_name.": ".$headers[$header_name],"\r\n";
				}
				echo "</PRE></LI>\n";
				flush();

				echo "<LI><H2>Response body:</H2>\n<PRE>\n";

				/*
					You can read the whole reply body at once or
					block by block to not exceed PHP memory limits.
				*/

				/*
				$error = $http->ReadWholeReplyBody($body);
				if(strlen($error) == 0)
					echo HtmlSpecialChars($body);
				*/

				for(;;)
				{
					$error=$http->ReadReplyBody($body,1000);
					if($error!=""
					|| strlen($body)==0)
						break;
					echo HtmlSpecialChars($body);
				}

				echo "</PRE></LI>\n";
				flush();
			}
		}
		$http->Close();
	}
	if(strlen($error))
		echo "<H2 align=\"center\">Error: ",$error,"</H2>\n";
?>
</UL>
<HR>
</BODY>
</HTML>
