zoukankan      html  css  js  c++  java
  • C#模拟HTTP Form请求上传文件

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.IO;
    using System.Collections.Specialized;
    
    namespace TechnetSamples
    {
    class Program
    {
    static void Main(string[] args)
    {
    string URLAuth = "https://technet.rapaport.com/HTTP/Authenticate.aspx";
    WebClient webClient = new WebClient();
    
    NameValueCollection formData = new NameValueCollection();
    formData["Username"] = "myUser";
    formData["Password"] = "myPassword";
    
    byte[] responseBytes = webClient.UploadValues(URLAuth, "POST", formData);
    string resultAuthTicket = Encoding.UTF8.GetString(responseBytes);
    webClient.Dispose();
    
    string URL = "http://technet.rapaport.com/HTTP/Upload/Upload.aspx?Method=file";
    string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
    System.Net.WebRequest webRequest = System.Net.WebRequest.Create(URL);
    
    webRequest.Method = "POST";
    webRequest.ContentType = "multipart/form-data; boundary=" + boundary;
    
    string FilePath = "C:\test.csv";
    formData.Clear();
    formData["ticket"] = resultAuthTicket;
    formData["ReplaceAll"] = "false";
    
    Stream postDataStream = GetPostStream(FilePath, formData, boundary);
    
    webRequest.ContentLength = postDataStream.Length;
    Stream reqStream = webRequest.GetRequestStream();
    
    postDataStream.Position = 0;
    
    byte[] buffer = new byte[1024];
    int bytesRead = 0;
    
    while ((bytesRead = postDataStream.Read(buffer, 0, buffer.Length)) != 0)
    {
    reqStream.Write(buffer, 0, bytesRead);
    }
    
    postDataStream.Close();
    reqStream.Close();
    
    StreamReader sr = new StreamReader(webRequest.GetResponse().GetResponseStream());
    string Result = sr.ReadToEnd();
    }
    
    private static Stream GetPostStream(string filePath, NameValueCollection formData, string boundary)
    {
    Stream postDataStream = new System.IO.MemoryStream();
    
    //adding form data
    string formDataHeaderTemplate = Environment.NewLine + "--" + boundary + Environment.NewLine +
    "Content-Disposition: form-data; name="{0}";" + Environment.NewLine + Environment .NewLine + "{1}";
    
    foreach (string key in formData.Keys)
    {
    byte[] formItemBytes = System.Text.Encoding.UTF8.GetBytes(string.Format(formDataHeaderTemplate,
    key, formData[key]));
    postDataStream.Write(formItemBytes, 0, formItemBytes.Length);
    }
    
    //adding file data
    FileInfo fileInfo = new FileInfo(filePath);
    
    string fileHeaderTemplate = Environment.NewLine + "--" + boundary + Environment.NewLine +
    "Content-Disposition: form-data; name="{0}"; filename="{1}"" +
    Environment.NewLine + "Content-Type: application/vnd.ms-excel" + Environment.NewLine + Environment.NewLine;
    
    byte[] fileHeaderBytes = System.Text.Encoding.UTF8.GetBytes(string.Format(fileHeaderTemplate,
    "UploadCSVFile", fileInfo.FullName));
    
    postDataStream.Write(fileHeaderBytes, 0, fileHeaderBytes.Length);
    
    FileStream fileStream = fileInfo.OpenRead();
    
    byte[] buffer = new byte[1024];
    
    int bytesRead = 0;
    
    while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
    {
    postDataStream.Write(buffer, 0, bytesRead);
    }
    
    fileStream.Close();
    
    byte[] endBoundaryBytes = System.Text.Encoding.UTF8.GetBytes("--" + boundary + "--");
    postDataStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
    
    return postDataStream;
    }
    }
    }
  • 相关阅读:
    MySQL(2)---Explain
    MySQL(1)---索引
    php 的 PHPExcel1.8.0 使用教程
    通过html5 的EventSource来进行数据推送
    centos6.6 下 安装 php7 按 nginx方式
    IIS PHP Warning: Unknown: open(c:\php\tmp\sess_xxx, O_RDWR) failed: Permission denied (13) in Unknown on line 0
    动态加载JS,并执行回调函数
    nginx 504 gateway time out
    php 账号不能同时登陆,当其它地方登陆时,当前账号失效
    php 函数中静态变量的问题
  • 原文地址:https://www.cnblogs.com/binlyzhuo/p/5969850.html
Copyright © 2011-2022 走看看