#using <mscorlib.dll>
#using <System.dll>
using namespace System;
using namespace System::Net;
using namespace System::IO;
using namespace System::Text;
using namespace System::Threading;
public __gc class RequestState {
// This class stores the state of the request.
static const int BUFFER_SIZE = 1024;
public:
StringBuilder* requestData;
Byte bufferRead[];
WebRequest* request;
WebResponse* response;
Stream* responseStream;
RequestState() {
bufferRead = new Byte[BUFFER_SIZE];
requestData = new StringBuilder(S"");
request = 0;
responseStream = 0;
}
};
__gc class WebRequest_BeginGetResponse {
public:
static ManualResetEvent* allDone = new ManualResetEvent(false);
static const int BUFFER_SIZE = 1024;
static void RespCallback(IAsyncResult* asynchronousResult) {
try {
// Set the State of request to asynchronous.
RequestState* myRequestState=dynamic_cast<RequestState*> (asynchronousResult->AsyncState);
WebRequest* myWebRequest1=myRequestState->request;
// End the Asynchronous response.
myRequestState->response = myWebRequest1->EndGetResponse(asynchronousResult);
// Read the response into a 'Stream' object.
Stream* responseStream = myRequestState->response->GetResponseStream();
myRequestState->responseStream=responseStream;
// Begin the reading of the contents of the HTML page and print it to the console.
IAsyncResult* asynchronousResultRead = responseStream->BeginRead(myRequestState->bufferRead, 0, BUFFER_SIZE, new AsyncCallback(0, ReadCallBack), myRequestState);
} catch (WebException* e) {
Console::WriteLine(S"WebException raised!");
Console::WriteLine(S"\n {0}", e->Message);
Console::WriteLine(S"\n {0}", __box(e->Status));
} catch (Exception* e) {
Console::WriteLine(S"Exception raised!");
Console::WriteLine(S"Source : {0}", e->Source);
Console::WriteLine(S"Message : {0}", e->Message);
}
}
static void ReadCallBack(IAsyncResult* asyncResult) {
try {
// Result state is set to AsyncState.
RequestState* myRequestState = dynamic_cast<RequestState*>(asyncResult->AsyncState);
Stream* responseStream = myRequestState->responseStream;
int read = responseStream->EndRead(asyncResult);
// Read the contents of the HTML page and then print to the console.
if (read > 0) {
myRequestState->requestData->
Append(Encoding::ASCII->GetString(myRequestState->bufferRead, 0, read));
IAsyncResult* asynchronousResult =
responseStream->BeginRead(myRequestState->bufferRead, 0, BUFFER_SIZE,
new AsyncCallback(0, ReadCallBack), myRequestState);
} else {
Console::WriteLine(S"\nThe HTML page Contents are: ");
if (myRequestState->requestData->Length>1) {
String* sringContent;
sringContent = myRequestState->requestData->ToString();
Console::WriteLine(sringContent);
}
Console::WriteLine(S"\nPress 'Enter' key to continue........");
responseStream->Close();
allDone->Set();
}
} catch (WebException* e) {
Console::WriteLine(S"WebException raised!");
Console::WriteLine(S"\n {0}", e->Message);
Console::WriteLine(S"\n {0}", __box(e->Status));
} catch (Exception* e) {
Console::WriteLine(S"Exception raised!");
Console::WriteLine(S"Source : {0}" , e->Source);
Console::WriteLine(S"Message : {0}" , e->Message);
}
}
};
int main() {
try {
// Create a new webrequest to the mentioned URL.
WebRequest* myWebRequest= WebRequest::Create(S"http://www.contoso.com");
// Please, set the proxy to a correct value.
WebProxy* proxy = new WebProxy(S"myproxy:80");
proxy->Credentials = new NetworkCredential(S"srikun", S"simrin123");
myWebRequest->Proxy=proxy;
// Create a new instance of the RequestState.
RequestState* myRequestState = new RequestState();
// The 'WebRequest' object is associated to the 'RequestState' object.
myRequestState->request = myWebRequest;
// Start the Asynchronous call for response.
IAsyncResult* asyncResult =
dynamic_cast<IAsyncResult*> (myWebRequest->BeginGetResponse(new AsyncCallback(asyncResult, WebRequest_BeginGetResponse::RespCallback), myRequestState));
WebRequest_BeginGetResponse::allDone->WaitOne();
// Release the WebResponse resource.
myRequestState->response->Close();
Console::Read();
} catch (WebException* e) {
Console::WriteLine(S"WebException raised!");
Console::WriteLine(S"\n {0}", e->Message);
Console::WriteLine(S"\n {0}", __box(e->Status));
} catch (Exception* e) {
Console::WriteLine(S"Exception raised!");
Console::WriteLine(S"Source : {0}", e->Source);
Console::WriteLine(S"Message : {0}", e->Message);
}
}