Download Partial HTTP data using PHP

Wednesday, March 12, 2008


/**
* Download Partial/Partof Page
*
* HTTP HEADERS links http://www.cs.tut.fi/~jkorpela/http.html
* HTTP RFC http://www.w3.org/Protocols/rfc2616/rfc2616.html
* Any Suggestion Welcome :)
*/

error_reporting(E_ALL);

$host = 'www.w3.org';
$path = '/2005/10/Process-20051014/activities.html';

$service_port = getservbyname('www', 'tcp');
$address = gethostbyname($host);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if ( $socket === false ) {
die("socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n");
}

$result = socket_connect($socket, $address, $service_port);

if ( $result === false ) {
die("socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n");
}

$in = '';
$in .= "GET {$path} HTTP/1.1\r\n";
$in .= "Host: {$host}\r\n";
$in .= "Range: bytes=0-200\r\n"; //0 to 200 OR first 200
#$in .= "Range: bytes=200-400\r\n"; //200 to 400
#$in .= "Range: bytes=200-\r\n"; //200 to onwards
#$in .= "Range: bytes=-200\r\n"; //last 200
$in .= "Connection: Close\r\n\r\n";

socket_write( $socket, $in, strlen( $in ) );

while ( $out = socket_read( $socket, 2048 ) ) {

$parts = explode("\n\n", str_replace("\r", '', $out));

$responsebody = htmlentities( empty($parts[1]) ? "" : $parts[1] );

echo "<fieldset><legend>Request Header</legend>".nl2br($in)."</fieldset>";
echo "<fieldset><legend>Response Header</legend>".nl2br($parts[0])."</fieldset>";
echo "<fieldset><legend>Response Body</legend><textarea cols='80' rows='20'>{$responsebody}</textarea></fieldset>";
}


#echo "Closing socket...";
socket_close($socket);

?&>

0 comments:

Diseño original por Open Media | Adaptación a Blogger por Blog and Web