zoukankan      html  css  js  c++  java
  • 利用HttpWebRequest模拟表单提交

      1 using System;
      2 using System.Collections.Specialized;
      3 using System.IO;
      4 using System.Net;
      5 using System.Text;
      6 
      7 namespace Allyn.Common
      8 {
      9     public class HttpHelper
     10     {
     11         /// <summary>
     12         /// 获取指定路径数据
     13         /// </summary>
     14         /// <param name="requestUri">提交路径</param>
     15         /// <param name="cookie">Cookie容器对象</param>
     16         /// <returns>字符串结果</returns>
     17         public static string GetForm(string requestUri, CookieContainer cookie)
     18         {
     19             HttpWebRequest request = WebRequest.CreateHttp(requestUri);
     20             request.Method = "get";
     21             request.CookieContainer = cookie;
     22             request.ContentLength = 0;
     23 
     24             WebResponse response = request.GetResponse();
     25             StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
     26             return reader.ReadToEnd();
     27         }
     28 
     29         /// <summary>
     30         /// 默认表单提交
     31         /// </summary>
     32         /// <param name="requestUri">提交路径</param>
     33         /// <param name="postData">提交数据</param>
     34         /// <param name="cookie">Cookie容器对象</param>
     35         /// <returns>字符串结果</returns>
     36         public static string PostForm(string requestUri, NameValueCollection postData, CookieContainer cookie)
     37         {
     38             HttpWebRequest request = WebRequest.CreateHttp(requestUri);
     39             request.Method = "post";
     40             request.ContentType = "application/x-www-form-urlencoded";
     41             request.CookieContainer = cookie;
     42 
     43             StringBuilder stringBuilder = new StringBuilder();
     44             foreach (string key in postData.Keys)
     45             {
     46                 stringBuilder.AppendFormat("&{0}={1}", key, postData.Get(key));
     47             }
     48             byte[] buffer = Encoding.UTF8.GetBytes(stringBuilder.ToString().Trim('&'));
     49             Stream requestStream = request.GetRequestStream();
     50             requestStream.Write(buffer, 0, buffer.Length);
     51             requestStream.Close();
     52 
     53             WebResponse response = request.GetResponse();
     54             StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
     55             return reader.ReadToEnd();
     56         }
     57 
     58         /// <summary>
     59         /// 多部件表单提交
     60         /// </summary>
     61         /// <param name="requestUri">提交路径</param>
     62         /// <param name="postData">提交数据.注:如果是文件路径,代表是文件.</param>
     63         /// <param name="cookie">Cookie容器对象</param>
     64         /// <returns>字符串结果</returns>
     65         public static string PostFormMultipart(string requestUri, NameValueCollection postData, CookieContainer cookie)
     66         {
     67             string boundary = string.Format("-----{0}", DateTime.Now.Ticks.ToString("x"));
     68             HttpWebRequest webrequest = WebRequest.CreateHttp(requestUri);
     69             webrequest.CookieContainer = cookie;
     70             webrequest.Timeout = 120000;
     71             webrequest.Method = "post";
     72             webrequest.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);
     73 
     74             Stream requestStream = webrequest.GetRequestStream();
     75             foreach (string key in postData.Keys)
     76             {
     77                 StringBuilder strBuilder = new StringBuilder();
     78                 strBuilder.AppendFormat("--{0}", boundary);
     79                 strBuilder.AppendFormat("
    Content-Disposition: form-data; name="{0}"", key);
     80                 if (File.Exists(postData.Get(key)))
     81                 {
     82                     strBuilder.AppendFormat(";filename="{0}"
    Content-Type: multipart/form-data
    
    ", Path.GetFileName(postData.Get(key)));
     83                     byte[] buffer = Encoding.UTF8.GetBytes(strBuilder.ToString());
     84                     requestStream.Write(buffer, 0, buffer.Length);
     85                     //获取图片流
     86                     FileStream fileStream = new FileStream(postData.Get(key), FileMode.Open, FileAccess.Read);
     87                     BinaryReader binaryReader = new BinaryReader(fileStream);
     88                     byte[] fileBuffer = binaryReader.ReadBytes((int)fileStream.Length);
     89                     binaryReader.Close();
     90                     fileStream.Close();
     91                     requestStream.Write(fileBuffer, 0, fileBuffer.Length);
     92                 }
     93                 else
     94                 {
     95                     strBuilder.AppendFormat("
    
    {0}
    ", postData.Get(key));
     96                     byte[] buff = Encoding.UTF8.GetBytes(strBuilder.ToString());
     97                     requestStream.Write(buff, 0, buff.Length);
     98                 }
     99             }
    100 
    101             byte[] boundaryBuffer = Encoding.UTF8.GetBytes(string.Format("
    --{0}
    ", boundary));
    102             requestStream.Write(boundaryBuffer, 0, boundaryBuffer.Length);
    103             requestStream.Close();
    104 
    105             WebResponse response = webrequest.GetResponse();
    106             StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
    107             return reader.ReadToEnd();
    108         }
    109     }
    110 }
  • 相关阅读:
    js自定义回调函数
    python:sql建表语句转换为json
    简单list转化为tree结构
    JSP中页面定时刷新
    struts2中<s:select/>标签的运用详解
    Redis 的 Sentinel
    redis持久化(persistence)
    java验证身份证合理性
    js 里面的键盘事件对应的键码
    Struts2中使用OGNL表达式语言访问静态方法和静态属性
  • 原文地址:https://www.cnblogs.com/allyn/p/10177888.html
Copyright © 2011-2022 走看看