补充 宝玉 之《URL欺骗之以假乱真!》之 POST 方法提交数据 之 处理!

补充 宝玉 之《URL欺骗之以假乱真!》之 POST 方法提交数据 之 处理!
(之乎者也,怪别扭的!)

我们首先搭建一个环境:
IIS 代理一下 Resin 下的 jsp 页面! (Resin 乃是 Java 应用服务器)

1.Resin 获取:
http://www.caucho.com/download/resin-2.1.16.zip
下载后解压某目录,如:
E:/Resin/resin-2.1.16/

2.配置 Resin  (Java SDK 的配置就不赘述)
用文本编辑器打开:
E:/Resin/resin-2.1.16/conf/resin.conf

<http port='8080'/>
可配置端口,resin 默认的是 8080 !
如果可用就不改!

<welcome-file-list>simplepost.jsp ,index.xtp, index.jsp, index.html </welcome-file-list>
可配置默认欢迎页面!

3.在 E:/Resin/resin-2.1.16/webapps/ 下创建新目录 test:
编写 E:/Resin/resin-2.1.16/webapps/test/index.jsp 并保存!
E:/Resin/resin-2.1.16/webapps/test/  就是一个 Application

<%@ page import='java.util.*'%>
<HTML>
<head>
<title>test</title>
</head>
<h1>Form Values:</h1>
<table>
<%
Enumeration e = request.getParameterNames();
while (e.hasMoreElements())
{
 String name = (String) e.nextElement();
 String[] values = (String[]) request.getParameterValues(name);
 %>
 <tr><td>
 <%= name %><td><%= values[0] %>
 <%
 if (values.length > 1)
 {
  for (int i = 1; i < values.length; i++)
  {
   %>,<%= values[i] %><%
  }
 }
}
%>
</table>
<form action='http://localhost' method='post'>
<input name='Comment' type="text" value="<%= request.getParameter("Comment") %>">
<input name='Comment2' type="text" value="<%= request.getParameter("Comment2") %>">
<input type=submit>
</form>
</body>
</HTML>


4.编写 C# Openlab.UrlCheat.cs : (修改宝玉的代码基础上完成POST操作的处理)

//Openlab.UrlCheat.cs
//命令行编译: csc /t:library Openlab.UrlCheat.cs
//生成的 Openlab.UrlCheat.dll 存放在 IIS 主目录下建一个 bin 目录!
//如: C:/Inetpub/wwwroot/bin/Openlab.UrlCheat.dll
namespace Openlab.UrlCheat
{
 using System;
 using System.Configuration;
 using System.Web;
 using System.IO;
 using System.Net;
 using System.Text;

 //原 Globals.cs
 /// <summary>
 /// Summary description for Globals.
 /// </summary>
 public class Globals
 {

  // 默认域名为博客堂
  private static string defaultDomain = "blog.joycode.com";

  public static bool IsNullorEmpty(string text)
  {
   if (text != null)
   {
    return (text.Trim() == string.Empty);
   }
   return true;
  }

  /// <summary>
  /// 根据Url返回HttpWebResponse对象
  /// </summary>
  /// <param name="url"></param>
  /// <returns></returns>
  public static HttpWebResponse WebResponse(string url)
  {
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
   HttpWebResponse response = (HttpWebResponse)request.GetResponse();
   return response;
  }

  /// <summary>
  /// 获取网页的编码信息
  /// </summary>
  /// <param name="response"></param>
  /// <returns></returns>
  /// <remarks>如果是网页,则其ConentType中含有编码信息,如"text/html; charset=utf-8"</remarks>
  public static Encoding GetEncoding(HttpWebResponse response)
  {
   string name = response.ContentEncoding;
   Encoding code = Encoding.Default;
   if (name == "")
   {
    string contentType = response.ContentType;
    if (contentType.ToLower().IndexOf("charset") != -1)
    {
     name = contentType.Substring(contentType.ToLower().IndexOf("charset=") + "charset=".Length);
    }
   }

   if (name != "")
   {
    try
    {
     code = Encoding.GetEncoding(name);
    }
    catch{}
   }
   return code;
  }

  /// <summary>
  /// 获取文本内容
  /// </summary>
  /// <param name="response"></param>
  /// <returns></returns>
  public static string TextContent(HttpWebResponse response)
  {
   string buffer = "",line;

   Stream stream = response.GetResponseStream();
   StreamReader reader = new StreamReader(stream, GetEncoding(response));
  
   //buffer = "<base href=http://localhost:1080 />";
   while( (line = reader.ReadLine())!=null )
   {
   
    buffer += line + "/r/n";
   }
   stream.Close();

   return buffer;
  }

  //post Copy & paste from QuickStart by playyuer $ at $ Microshaoft.com
  //http://chs.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/howto/samples/net/WebRequests/clientPOST.src&file=CS/clientpost.cs&font=3
  //另外本人还有一篇老帖可参考
  // 《C# 写的 HttpRequsetResponse 类,异步、事件... 还热乎着呢!》
  //
http://blog.csdn.net/playyuer/archive/2003/07/03/2856.aspx
  public static string getPage(string url,string payload)
  {
   System.Net.WebResponse result = null;
   string s = "";
   try
   {

    WebRequest req = WebRequest.Create(url);
    req.Method = "POST";
    req.ContentType = "application/x-www-form-urlencoded";
    StringBuilder UrlEncoded = new StringBuilder();
    Char[] reserved = {'?', '=', '&'};
    byte[] SomeBytes = null;

    if (payload != null)
    {
     int i=0, j;
     while(i<payload.Length)
     {
      j=payload.IndexOfAny(reserved, i);
      if (j==-1)
      {
       UrlEncoded.Append(HttpUtility.UrlEncode(payload.Substring(i, payload.Length-i)));
       break;
      }
      UrlEncoded.Append(HttpUtility.UrlEncode(payload.Substring(i, j-i)));
      UrlEncoded.Append(payload.Substring(j,1));
      i = j+1;
     }
     SomeBytes = Encoding.UTF8.GetBytes(UrlEncoded.ToString());
     req.ContentLength = SomeBytes.Length;
     Stream newStream = req.GetRequestStream();
     newStream.Write(SomeBytes, 0, SomeBytes.Length);
     newStream.Close();
    }
    else
    {
     req.ContentLength = 0;
    }

    result = req.GetResponse();
    Stream ReceiveStream = result.GetResponseStream();
    Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
    StreamReader sr = new StreamReader( ReceiveStream, encode );
    Console.WriteLine("/r/n已接收到响应流");
    Char[] read = new Char[256];
    int count = sr.Read( read, 0, 256 );
    Console.WriteLine("HTML.../r/n");
    while (count > 0)
    {
     String str = new String(read, 0, count);
     Console.Write(str);
     // add by playyuer
     s += str;
     count = sr.Read(read, 0, 256);
    }
    Console.WriteLine("");
    return s;
   }
   catch(Exception e)
   {
    Console.WriteLine( e.ToString());
    Console.WriteLine("/r/n找不到请求 URI,或者它的格式不正确");
    return s;
   }
   finally
   {
    if ( result != null )
    {
     result.Close();
    }
   
   }
  }


  /// <summary>
  /// 域名
  /// </summary>
  /// <remarks>如果支持泛域名解析,那么也可以做到1bu.com那样的效果:)</remarks>
  public static string Domain
  {
   get
   {
    string domain = ConfigurationSettings.AppSettings["Domain"];
    if (domain == null || domain == "")
     domain = defaultDomain;
    return domain;
   }
  }

  /// <summary>
  /// 域名的URL
  /// </summary>
  public static string DomainUrl
  {
   get
   {
    string url = Domain.ToLower();
    if (!url.StartsWith("http://"))
    {
     url = "http://" + url;
    }
    if (!url.EndsWith("/"))
    {
     url = url + "/";
    }
    return url;
   }
  }

  /// <summary>
  /// 真实地址
  /// </summary>
  /// <param name="rawUrl"></param>
  /// <returns></returns>
  public static string RealUrl(string rawUrl)
  {
   string realUrl;
   realUrl = Globals.DomainUrl + rawUrl.TrimStart('/');
   return realUrl;
  }

  static public string ApplicationPath
  {

   get
   {
    string applicationPath = HttpContext.Current.Request.ApplicationPath;

    if (applicationPath == "/")
    {
     return string.Empty;
    }
    else
    {
     return applicationPath.ToLower();
    }
   }
  }
 }

 //原 Redirect.cs
 /// <summary>
 /// 转向URL
 /// </summary>
 public class Redirect : IHttpHandler
 {
  public Redirect()
  {
   
  }

  public void ProcessRequest(HttpContext context)
  {
   string rawUrl = context.Request.RawUrl.ToLower();
   string realUrl = rawUrl;
   if (!Globals.IsNullorEmpty(rawUrl))
   {
    if (!rawUrl.StartsWith("http://"))
    {
     realUrl = Globals.RealUrl(rawUrl);
    }
   }
   context.Response.Redirect(realUrl);
   context.Response.End();
  }


  // Properties
  public bool IsReusable
  {
   get
   {
    return false;
   }
  }
 }

 //原 WebResponse.cs
 /// <summary>
 /// 输出内容
 /// </summary>
 public class WebResponse : IHttpHandler
 {
  
  public void ProcessRequest(HttpContext context)
  {
   string rawUrl = context.Request.RawUrl.ToLower();
   if (!Globals.IsNullorEmpty(rawUrl))
   {
    // 如果是"http://"开头则表示是绝对路径,直接跳转即可
    if (!rawUrl.StartsWith("http://"))
    {
     string realUrl = Globals.RealUrl(rawUrl);
     //add by playyuer $ at $ Microshaoft.com
     if (context.Request.HttpMethod.ToLower() == "get")
     {
      HttpWebResponse response = Globals.WebResponse(realUrl);

      // 如果不是文本类型的,就跳转
      if (!response.ContentType.ToLower().StartsWith("text/"))
       context.Response.Redirect(realUrl);

      // 文本类型则先获取文本内容,然后直接输出到浏览.
      string content = Globals.TextContent(response);
      context.Response.Write(content);
     }
      
//add by playyuer $ at $ Microshaoft.com
     else //post
     {
      string S = "";
      foreach (string s in context.Request.Form.AllKeys)
      {
       if (S.Length > 0)
        S += "&";
       S += s + "=" + context.Request.Form[s];
      }
      //context.Response.Write(S);
      context.Response.Write(Globals.getPage(realUrl,S));
     }
    }
    else
    {
     context.Response.Redirect(rawUrl);
    }
   }
   else
   {
    //
   }
   context.Response.End();
  }

  public bool IsReusable
  {
   get
   {
    return false;
   }
  }
 }
}


4.IIS 主目录下的 web.Config ,如: C:/Inetpub/wwwroot/web.Config :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <system.web>
  <compilation defaultLanguage="c#" debug="true" />
  <httpHandlers>
   <add verb="*" path="*.gif" type="Openlab.UrlCheat.Redirect, Openlab.UrlCheat" />
   <add verb="*" path="*.jpg" type="Openlab.UrlCheat.Redirect, Openlab.UrlCheat" />
   <add verb="*" path="*.jpeg" type="Openlab.UrlCheat.Redirect, Openlab.UrlCheat" />
   <add verb="*" path="*.rar" type="Openlab.UrlCheat.Redirect, Openlab.UrlCheat" />
   <add verb="*" path="*.zip" type="Openlab.UrlCheat.Redirect, Openlab.UrlCheat" />
   <add verb="*" path="*.webinfo" type="System.Web.HttpForbiddenHandler"/>
   <add verb="GET" path="*" type="Openlab.UrlCheat.WebResponse, Openlab.UrlCheat" />
   <add verb="POST" path="*" type="Openlab.UrlCheat.WebResponse, Openlab.UrlCheat" />
  </httpHandlers>
 </system.web>
 <appSettings>
  <!-- 您可以修改这个域名 -->
  <add key="Domain" value="http://localhost:8080/test/" />
 </appSettings>
</configuration>


5.运行 Resin 及 IIS
E:/Resin/resin-2.1.16/bin/httpd.exe

6.在 IE 地址栏访问: http://localhost
提交一些数据测试!看看回显是否正确?!

我测的够慢的!
另外宝玉和我都没考虑替换 href  的 url 处理!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 《信息论基础》是田宝玉教授主持编写的一本关于信息论基础的教材,主要包括信息论的基本概念、信息量及其度量方法、离散信源和信源编码、信道容量和通信系统性能等基础知识。与其他信息论教材相比,这本教材注重理论与实际应用的结合,兼顾了基础理论的讲解和实际问题的运用。 该教材主要分为七个章节,第一章介绍了信息论的基本概念和历史背景;第二章讲述了信息源和信息量的概念,并介绍了熵的概念及其度量方法;第三章详细讲述了离散信源和信源编码的方式;第四章介绍了信道模型、信道容量以及信道编码技术;第五章主要讨论了误差控制编码、信道编译码等相关内容;第六章介绍了包括多项式码、卷积码等在内的现代编码理论;最后一章则探讨了信源和信道联合编码的问题。 相比其他信息论教材,田宝玉编写的《信息论基础》更具有实用性,涉及了许多实际问题的解决方式,并深入探讨了现代通信系统的关键技术。对学习通信工程、信息工程等相关专业的学生而言,这本教材不仅能够帮助他们学习并掌握信息论的基本知识,还能够为他们在实践中应用所学知识提供重要的参考。 ### 回答2: 《信息论基础》是一本介绍信息理论基础知识的书,是在信息论研究领域尤为重要的基础教材之一。该书由田宝玉编写,详细阐述了信息量、信息熵、信源编码、信道编码、信道容量等重要概念以及它们在通信系统中的具体应用。该书内容系统,知识点清晰,对于读者理解信息论概念和应用有很大帮助。 首先,该书从信息的本质、表示方式、信息量等方面深入阐述了信息论的基础概念。尤其是在信息熵的概念和应用方面,作者用数学方法详细阐述了信息熵的计算方法和应用,通过实例和分析,让读者对信息熵有了更深刻的理解。其次,该书还介绍了信源编码和信道编码的知识,这是通信系统中不可或缺的重要环节。作者深入浅出地阐述了这些编码方法的基本原理和实现方法,使读者能够理解和应用这些技术。最后,该书还介绍了信道容量的概念和应用,以及对误差纠正和调制解调等方面的讲解。 总之,《信息论基础》为读者介绍了信息论基本概念和应用,让读者了解到信息论在通信系统中起到关键的作用。对于学习信息与通信领域的学者、工程师,以及研究信息处理的科技人员等都有着重要的参考和借鉴价值。 ### 回答3: 《信息论基础》是一本介绍信息论的基本概念、理论及其应用的教材。本教材共分为六章,分别是信息的基本概念与表示、信息的度量、离散信源的编码、离散信道的传输、连续信源的压缩编码、连续信道的传输。本教材内容既有理论论述,又有实际应用,既有定量计算,也有对概念的解释和阐述。通过《信息论基础》的学习,读者可以掌握信息论的基本概念,了解信息的度量方法,掌握离散和连续信源的编码方法以及离散和连续信道的传输方法,为理解信息传输和处理提供基础知识。此外,本教材的作者田宝玉教授是信息论和编码学的专家,具有丰富的教学经验,因此本教材的讲解深入浅出、生动易懂,是信息论初学者和从事相关工作的读者值得一读的教材。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值