#!/usr/bin/perl -w use Win32; #for Win32::GetCurrentThreadId() use Win32::Internet; %s = ( '10' => 'INTERNET_STATUS_RESOLVING_NAME', '11' => 'INTERNET_STATUS_NAME_RESOLVED', '20' => 'INTERNET_STATUS_CONNECTING_TO_SERVER', '21' => 'INTERNET_STATUS_CONNECTED_TO_SERVER', '30' => 'INTERNET_STATUS_SENDING_REQUEST', '31' => 'INTERNET_STATUS_REQUEST_SENT', '40' => 'INTERNET_STATUS_RECEIVING_RESPONSE', '41' => 'INTERNET_STATUS_RESPONSE_RECEIVED', '42' => 'INTERNET_STATUS_CTL_RESPONSE_RECEIVED', '43' => 'INTERNET_STATUS_PREFETCH', '50' => 'INTERNET_STATUS_CLOSING_CONNECTION', '51' => 'INTERNET_STATUS_CONNECTION_CLOSED', '60' => 'INTERNET_STATUS_HANDLE_CREATED', '70' => 'INTERNET_STATUS_HANDLE_CLOSING', '80' => 'INTERNET_STATUS_DETECTING_PROXY', '100' => 'INTERNET_STATUS_REQUEST_COMPLETE', '110' => 'INTERNET_STATUS_REDIRECT', '120' => 'INTERNET_STATUS_INTERMEDIATE_RESPONSE', '140' => 'INTERNET_STATUS_USER_INPUT_REQUIRED', '200' => 'INTERNET_STATUS_STATE_CHANGE', '320' => 'INTERNET_STATUS_COOKIE_SENT', '321' => 'INTERNET_STATUS_COOKIE_RECEIVED', '324' => 'INTERNET_STATUS_PRIVACY_IMPACTED', '325' => 'INTERNET_STATUS_P3P_HEADER', '326' => 'INTERNET_STATUS_P3P_POLICYREF', '327' => 'INTERNET_STATUS_COOKIE_HISTORY' ); $c = new Win32::Internet({'flags'=>INTERNET_FLAG_ASYNC}); print "Perl perl land thread id=".Win32::GetCurrentThreadId()."\n"; $c->SetStatusCallback(); print 'r='.$c->HTTP($http, "google.com", undef, undef, undef, undef, 1)."\n"; ($num, $text) = $c->Error(); print "Connection num=$num,text=$text\n"; #($status, $info) = $c->GetStatusCallback(1); #print 'callback '.$s{$status}." $info \n"; $http->OpenRequest($req, '/', 'GET', 'HTTP/1.1', '', undef, 0, 2); #($status, $info) = $c->GetStatusCallback(2); #print 'callback '.$s{$status}." $info \n"; ($num, $text) = $http->Error(); print "OpenRequest num=$num,text=$text\n"; print "We are at last point before SendRequest(), which will trigger the crash\n"; system('pause'); $req->SendRequest(); ($num, $text) = $http->Error(); print "SendRequest num=$num,text=$text\n"; #($status, $info) = $c->GetStatusCallback(2); #print 'callback '.$s{$status}." $info \n"; while($req->QueryInfo("",HTTP_QUERY_STATUS_CODE) == 0) {print "sleeping while downloading\n"; sleep 1;} print "HTTP code = ".$req->QueryInfo("",HTTP_QUERY_STATUS_CODE)."\n"; #($status, $info) = $c->GetStatusCallback(2); #print 'callback '.$s{$status}." $info \n"; $file = $req->ReadEntireFile(); print 'first 40 chars of file are "'.substr($file,0,40)."\"\n"; $http->Close();