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;
}