<?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>
|