zoukankan      html  css  js  c++  java
  • 异步获取远程文件

    using System;
    using System.IO;
    using System.Net;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;

    namespace Test
    {
    public class RequestState
    {
    const int BUFFER_SIZE = 1024;
    public StringBuilder requestData;
    public byte[] BufferRead;
    public HttpWebRequest request;
    public HttpWebResponse response;
    public Stream streamResponse;

    public RequestState()
    {
    BufferRead
    = new byte[BUFFER_SIZE];
    requestData
    = new StringBuilder("");
    request
    = null;
    streamResponse
    = null;
    }
    }

    public class HttpWebRequest_BeginGetResponse
    {
    public static ManualResetEvent allDone = new ManualResetEvent(false);
    const int BUFFER_SIZE = 1024;
    const int DefaultTimeout = 2 * 60 * 1000; // 2 minutes timeout

    // Abort the request if the timer fires.
    private static void TimeoutCallback(object state, bool timedOut)
    {
    if (timedOut)
    {
    HttpWebRequest request
    = state as HttpWebRequest;
    if (request != null)
    {
    request.Abort();
    }
    }
    }

    public void Read()
    {
    try
    {
    // Create a HttpWebrequest object to the desired URL.
    HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(@"http://passport.cnblogs.com/login.aspx");

    RequestState myRequestState
    = new RequestState();
    myRequestState.request
    = myHttpWebRequest;

    IAsyncResult result
    = (IAsyncResult)myHttpWebRequest.BeginGetResponse(new AsyncCallback(RespCallback), myRequestState);
    ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle,
    new WaitOrTimerCallback(TimeoutCallback), myHttpWebRequest, DefaultTimeout, true);
    allDone.WaitOne();
    myRequestState.response.Close();
    }
    catch (WebException e)
    {
    Console.WriteLine(
    "\nMain Exception raised!");
    Console.WriteLine(
    "\nMessage:{0}", e.Message);
    Console.WriteLine(
    "\nStatus:{0}", e.Status);
    Console.WriteLine(
    "Press any key to continue..........");
    }
    catch (Exception e)
    {
    Console.WriteLine(
    "\nMain Exception raised!");
    Console.WriteLine(
    "Source :{0} ", e.Source);
    Console.WriteLine(
    "Message :{0} ", e.Message);
    Console.WriteLine(
    "Press any key to continue..........");
    Console.Read();
    }
    }
    private static void RespCallback(IAsyncResult asynchronousResult)
    {
    try
    {
    // State of request is asynchronous.
    RequestState myRequestState = (RequestState)asynchronousResult.AsyncState;
    HttpWebRequest myHttpWebRequest
    = myRequestState.request;
    myRequestState.response
    = (HttpWebResponse)myHttpWebRequest.EndGetResponse(asynchronousResult);

    // Read the response into a Stream object.
    Stream responseStream = myRequestState.response.GetResponseStream();
    myRequestState.streamResponse
    = responseStream;

    // Begin the Reading of the contents of the HTML page and print it to the console.
    IAsyncResult asynchronousInputRead = responseStream.BeginRead(myRequestState.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);
    return;
    }
    catch (WebException e)
    {
    Console.WriteLine(
    "\nRespCallback Exception raised!");
    Console.WriteLine(
    "\nMessage:{0}", e.Message);
    Console.WriteLine(
    "\nStatus:{0}", e.Status);
    }
    allDone.Set();
    }

    private static void ReadCallBack(IAsyncResult asyncResult)
    {
    try
    {
    RequestState myRequestState
    = (RequestState)asyncResult.AsyncState;
    Stream responseStream
    = myRequestState.streamResponse;
    int read = responseStream.EndRead(asyncResult);
    // Read the HTML page and then print it 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(ReadCallBack), myRequestState);
    return;
    }
    else
    {
    Console.WriteLine(
    "\nThe contents of the Html page are : ");
    if (myRequestState.requestData.Length > 1)
    {
    string stringContent;
    stringContent
    = myRequestState.requestData.ToString();
    Console.WriteLine(
    "\t");
    Console.WriteLine(
    "\t");
    Console.WriteLine(
    "\t");
    Console.WriteLine(
    "\t");
    Console.WriteLine(stringContent);
    Console.WriteLine(
    "\t");
    Console.WriteLine(
    "\t");
    }
    Console.WriteLine(
    "Press any key to continue..........");
    Console.ReadLine();

    responseStream.Close();
    }
    }
    catch (WebException e)
    {
    Console.WriteLine(
    "\nReadCallBack Exception raised!");
    Console.WriteLine(
    "\nMessage:{0}", e.Message);
    Console.WriteLine(
    "\nStatus:{0}", e.Status);
    }
    allDone.Set();
    }
    }
    }

  • 相关阅读:
    Hack World和CTFHub布尔注入记录
    MySQL updatexml()、extractvalue() 报错型SQL注入
    常见的Web源码泄漏漏洞及其利用(转载记录)
    大白
    [强网杯 2019]随便注
    [极客大挑战 2019]LoveSQL 1
    Mysql--事物
    Android深度探索-卷1第十章心得体会
    Android深度探索-卷1第八章心得体会
    Android深度探索-卷1第九章心得体会
  • 原文地址:https://www.cnblogs.com/tommyli/p/1792357.html
Copyright © 2011-2022 走看看