I think this will do what I am lookijng for (which is log into a website which requires username and passwrod to be passed) and grab specific data. However I cannot make sence of this snippet, Anyone care to help please!
<?
/*
GetUrl v1.0
comment, suggestion, love letter,... tahmer@free.fr
return:
-1 cant connect
0 protocol error
1 ok
parameter
$host webserver (ie: "www.web.com")
$url page beginning with "/" (ie: "/index.html")
$cookie list of cookie
syntax: [name=value [ ';' name=value]]
ie: cookie1=v1
or
cookie1=v1; cookie2=v2; ...
$page(out) content of url
$header(out) content of header
exemple:
login on a web server
the login process send a cookie "MagicNumber" witch is mandatory to
access a database result page
ps: cookie are sent by server in the header
Set-Cookie: name=value;....
$res=readurl("www.webserver.com","/login.cgi?user_name=me&password=mypass","",$page,$header);
if ($res!=1) exit;
$MagicNumber=0;
if (preg_match("/Set-Cookie:\s+MagicNumber=(\d+)/i", $header, $parts))
$MagicNumber=$parts[1];
if ($MagicNumber==0) exit;
$res=readurl("www.webserver.com","/result.cgi?query=my_query","MagicNumber=$MagicNumber",$page,$header);
*/
function GetUrl($host,$url,$cookie,&$page,&$header)
{
$page="";
$header="";
$sock=fsockopen($host,80);
if (!$sock) return -1;
$msg="GET $url HTTP/1.1";
if ($cookie!="") $msg.="\r\nCookie: $cookie";
$msg.="\r\n"."Host: $host";
$msg.="\r\n"."Accept: text/html";
$msg.="\r\n\r\n\r\n\r\n";
fputs($sock,$msg);
$chunked=0;
// read header
while ($buffer=fgets($sock,4096)) {
if ($buffer=="\r\n") break;
$header.=$buffer;
if (preg_match("/Transfer-Encoding:\s+(.+)\r\n/U", $buffer, $parts))
if (strtoupper($parts[1])=="CHUNKED") $chunked=1;
else echo "???".$parts[1]."??\r\n";
}
if ($chunked==0) {
while ($buffer = fgets($sock, 4096)) {
$page.=$buffer;
// echo $buffer;
}
}
else {
while ($buffer = fgets($sock, 4096)) {
if (!preg_match("/\s([\dABCDEFabcdef]+)\s\r\n/i", $buffer, $parts)) {
echo "chunk size not found : $buffer\r\n";
return 0;
}
$size = (int)base_convert(strtoupper($parts[1]), 16, 10);
if ($size==0) break;
$buffer=fread($sock,$size);
if (strlen($buffer)!=$size) {
echo "reading : $size\r\n";
echo "readed : ".strlen($buffer)."\r\n";
return 0;
}
$page.=$buffer;
// echo $buffer;
$buffer=fgets($sock,4096);
if ($buffer!="\r\n") {
echo "**CRLF not found : $buffer\r\n";
return 0;
}
}
}
fclose($sock);
return 1;
}
?>