zoukankan      html  css  js  c++  java
  • HttpProxyHandler

    
    <%@ WebHandler Language="C#" Debug="True" Class="Microshaoft.HttpProxyHandler" %>
    namespace Microshaoft
    {
        using System;
        using System.IO;
        using System.Linq;
        using System.Net;
        using System.Web;
        public class HttpProxyHandler : IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                HttpWebRequest httpWebRequest = null;
                WebResponse webResponse = null;
                try
                {
                    var request = context.Request;
                    string url = request["fw"];
                    byte[] buffer = ReadStreamToBytes(request.InputStream);
                    httpWebRequest = (HttpWebRequest) WebRequest.Create(url);
                    httpWebRequest.Method = request.HttpMethod;
                    httpWebRequest.ContentType = request.ContentType;
                    httpWebRequest.UserAgent = request.UserAgent;
                    httpWebRequest.KeepAlive = false;
                    ServicePointManager.Expect100Continue = false;
                    //httpWebRequest.SendChunked = true;
                    //httpWebRequest.TransferEncoding = request.ContentEncoding.EncodingName;
                    if
                        (
                            request.Headers.AllKeys.Any
                                                    (
                                                        (x) =>
                                                        {
                                                            return (x.ToLower() == "soapaction");
                                                        }
                                                    )
                        )
                    {
                        httpWebRequest.Headers.Add("SOAPAction", request.Headers["SOAPAction"]);
                    }
                    httpWebRequest.Headers.Add("X-Forwarded-For", request.UserHostAddress);
                    httpWebRequest.Timeout = 10 * 1000;
                    if (buffer.Length > 0)
                    {
                        using (Stream stream = httpWebRequest.GetRequestStream())
                        {
                            stream.Write(buffer, 0, buffer.Length);
                            stream.Close();
                        }
                    }
                    webResponse = httpWebRequest.GetResponse();
                    using (Stream stream = webResponse.GetResponseStream())
                    {
                        buffer = ReadStreamToBytes(stream);
                        stream.Close();
                    }
                    var response = context.Response;
                    response.BinaryWrite(buffer);
                }
                catch (Exception e)
                {
                    throw new Exception("OrignalInnerException", e);
                }
                finally
                {
                    if (webResponse != null)
                    {
                        webResponse.Close();
                        webResponse = null;
                    }
                    if (httpWebRequest != null)
                    {
                        httpWebRequest.Abort();
                        httpWebRequest = null;
                    }
                }
            }
            private byte[] ReadStreamToBytes(Stream stream)
            {
                byte[] buffer = new byte[64 * 1024];
                MemoryStream ms = new MemoryStream();
                int r = 0;
                int l = 0;
                long position = -1;
                if (stream.CanSeek)
                {
                    position = stream.Position;
                    stream.Position = 0;
                }
                while (true)
                {
                    r = stream.Read(buffer, 0, buffer.Length);
                    if (r > 0)
                    {
                        l += r;
                        ms.Write(buffer, 0, r);
                    }
                    else
                    {
                        break;
                    }
                }
                byte[] bytes = new byte[l];
                ms.Position = 0;
                ms.Read(bytes, 0, (int)l);
                ms.Close();
                ms = null;
                if (position >= 0)
                {
                    stream.Position = position;
                }
                return bytes;
            }
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }
    /*
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title> new document </title>
        <META NAME="Generator" CONTENT="EditPlus,Microshaoft">
        <META NAME="Author" CONTENT="EditPlus,Microshaoft">
        <META NAME="Keywords" CONTENT="EditPlus,Microshaoft">
        <META NAME="Description" CONTENT="EditPlus,Microshaoft">
    </head>
    <body>
    <form method="post" action="http://local.asp.net/proxy.ashx" target="_blank">
        <input type="text" name="a" />
        <input type="text" name="fw" value="http://interface.morsing.local/test.aspx" />
        <input type="submit" />
    </form>
    </body>
    </html>
    */
    
    
  • 相关阅读:
    【Python】异常
    【Python】面向对象
    【Python】文件操作
    【Python】函数
    【Python】介绍以及环境搭建
    【Java】阿里巴巴开发规范手册
    【Java】NIO
    【Java】JUC
    【Git】国内的项目托管网站-码云
    【Git】在 Idea 中使用 Git
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/2601985.html
Copyright © 2011-2022 走看看