ACRCloudWebAPITest.IdentifyProtocolV1.postHttp C# (CSharp) Method

postHttp() public static method

public static postHttp ( string url, Object>.IDictionary postParams, int timeout ) : string
url string
postParams Object>.IDictionary
timeout int
return string
        public static string postHttp(string url, IDictionary<string, Object> postParams, int timeout)
        {
            string result = "";

               string BOUNDARYSTR = "acrcloud***copyright***2015***" + DateTime.Now.Ticks.ToString("x");
               string BOUNDARY = "--" + BOUNDARYSTR + "\r\n";
               var ENDBOUNDARY = Encoding.ASCII.GetBytes("--" + BOUNDARYSTR + "--\r\n\r\n");

               var stringKeyHeader = BOUNDARY +
                          "Content-Disposition: form-data; name=\"{0}\"" +
                          "\r\n\r\n{1}\r\n";
               var filePartHeader = BOUNDARY +
                           "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" +
                           "Content-Type: application/octet-stream\r\n\r\n";

               var memStream = new MemoryStream();
               foreach (var item in postParams)
               {
               if (item.Value is string)
               {
                   string tmpStr = string.Format(stringKeyHeader, item.Key, item.Value);
                   byte[] tmpBytes = Encoding.UTF8.GetBytes(tmpStr);
                   memStream.Write(tmpBytes, 0, tmpBytes.Length);
               }
               else if (item.Value is byte[])
               {
                   var header = string.Format(filePartHeader, "sample", "sample");
                   var headerbytes = Encoding.UTF8.GetBytes(header);
                   memStream.Write(headerbytes, 0, headerbytes.Length);
                   byte[] sample = (byte[])item.Value;
                   memStream.Write(sample, 0, sample.Length);
                   memStream.Write(Encoding.UTF8.GetBytes("\r\n"), 0, 2);
               }
               }
               memStream.Write(ENDBOUNDARY, 0, ENDBOUNDARY.Length);

               HttpWebRequest request = null;
               HttpWebResponse response = null;
               Stream writer = null;
               StreamReader myReader = null;
               try
               {
               request = (HttpWebRequest)WebRequest.Create(url);
               request.Timeout = timeout;
               request.Method = "POST";
               request.ContentType = "multipart/form-data; boundary=" + BOUNDARYSTR;

               memStream.Position = 0;
               byte[] tempBuffer = new byte[memStream.Length];
               memStream.Read(tempBuffer, 0, tempBuffer.Length);

               writer = request.GetRequestStream();
               writer.Write(tempBuffer, 0, tempBuffer.Length);
               writer.Close();
               writer = null;

               response = (HttpWebResponse)request.GetResponse();
               myReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
               result = myReader.ReadToEnd();
               }
               catch (WebException e)
               {
               Debug.WriteLine("timeout:\n" + e.ToString());
               }
               catch (Exception e)
               {
               Debug.WriteLine("other excption:" + e.ToString());
               }
               finally
               {
               if (memStream != null)
               {
                   memStream.Close();
                   memStream = null;
               }
               if (writer != null)
               {
                   writer.Close();
                   writer = null;
               }
               if (myReader != null)
               {
                   myReader.Close();
                   myReader = null;
               }
               if (request != null)
               {
                   request.Abort();
                   request = null;
               }
               if (response != null)
               {
                   response.Close();
                   response = null;
               }
               }

               return result;
        }