Advertisement
Ruslan_Rayanov

Untitled

May 11th, 2024
555
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.66 KB | None | 0 0
  1.  
  2.         private HttpWebResponse MakeFormDataRequest(Dictionary<string, string> files, Dictionary<string, string> otherValues, string contentType = "", NameValueCollection headers = null)
  3.         {
  4.             var req = (HttpWebRequest)WebRequest.Create(this.Url);
  5.  
  6.             req.Timeout = 10000 * 1000;
  7.             req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
  8.             req.AllowAutoRedirect = false;
  9.             req.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
  10.  
  11.             var mimeParts = new List<MimePart>();
  12.             try
  13.             {
  14.                 if (headers != null)
  15.                 {
  16.                     req.Headers.Add(headers);
  17.                 }
  18.                 if (otherValues != null)
  19.                 {
  20.                     foreach (var fieldName in otherValues.Keys)
  21.                     {
  22.                         var part = new MimePart();
  23.  
  24.                         part.Headers["Content-Disposition"] = "form-data; name=\"" + fieldName + "\"";
  25.                         part.Data = new MemoryStream(Encoding.UTF8.GetBytes(otherValues[fieldName]));
  26.  
  27.                         mimeParts.Add(part);
  28.                     }
  29.                 }
  30.  
  31.                 if (files != null)
  32.                 {
  33.                     foreach (var fieldName in files.Keys)
  34.                     {
  35.                         var part = new MimePart();
  36.  
  37.                         part.Headers["Content-Disposition"] = "form-data; name=\"" + fieldName + "\"; filename=\"" + Path.GetFileName(files[fieldName]) + "\"";
  38.                         part.Data = System.IO.File.OpenRead(files[fieldName]);
  39.                        
  40.                         var mimePartProvider = new FileExtensionContentTypeProvider();
  41.  
  42.                         var defaultContentType = "application/octet-stream";
  43.                         if (!mimePartProvider.TryGetContentType(files[fieldName], out string fileContentType)) {
  44.                             fileContentType = defaultContentType;
  45.                         }
  46.  
  47.                         part.Headers["Content-Type"] = fileContentType;
  48.  
  49.                         mimeParts.Add(part);
  50.                     }
  51.                 }
  52.                 string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
  53.  
  54.                 req.ContentType = !String.IsNullOrEmpty(contentType) ? contentType : "multipart/form-data; boundary=" + boundary;
  55.                 req.Method = this.Method;
  56.  
  57.                 long contentLength = 0;
  58.  
  59.                 byte[] _footer = Encoding.UTF8.GetBytes("--" + boundary + "--\r\n");
  60.  
  61.                 foreach (MimePart part in mimeParts)
  62.                 {
  63.                     contentLength += part.GenerateHeaderFooterData(boundary);
  64.                 }
  65.  
  66.                 req.ContentLength = contentLength + _footer.Length;
  67.  
  68.                 byte[] buffer = new byte[8192];
  69.                 byte[] afterFile = Encoding.UTF8.GetBytes("\r\n");
  70.                 int read;
  71.  
  72.                 using (Stream s = req.GetRequestStream())
  73.                 {
  74.                     foreach (MimePart part in mimeParts)
  75.                     {
  76.                         s.Write(part.Header, 0, part.Header.Length);
  77.  
  78.                         while ((read = part.Data.Read(buffer, 0, buffer.Length)) > 0)
  79.                             s.Write(buffer, 0, read);
  80.  
  81.                         part.Data.Dispose();
  82.  
  83.                         s.Write(afterFile, 0, afterFile.Length);
  84.                     }
  85.  
  86.                     s.Write(_footer, 0, _footer.Length);
  87.                 }
  88.  
  89.                 var res = (HttpWebResponse)req.GetResponse();
  90.  
  91.                 return res;
  92.             }
  93.             catch (Exception ex)
  94.             {
  95.                 if (ex is WebException) {
  96.                     var response = ((WebException)ex).Response?.GetResponseStream();
  97.  
  98.                     if (ex.Message.Contains("302")) {
  99.                         return (HttpWebResponse)((WebException)ex).Response;
  100.                     }
  101.  
  102.                     if (response != null) {
  103.                         using (var stream = new StreamReader(response)) {
  104.                             var error = stream.ReadToEnd();
  105.                             if (!string.IsNullOrEmpty(error)) {
  106.                                 throw new Exception(error);
  107.                             }
  108.                         }
  109.                     }
  110.                 }
  111.  
  112.                 Console.WriteLine(ex.Message);
  113.                 foreach (MimePart part in mimeParts)
  114.                     if (part.Data != null)
  115.                         part.Data.Dispose();
  116.  
  117.                 return (HttpWebResponse)req.GetResponse();
  118.             }
  119.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement