public void postForm(string pUrl, Dictionary<string, string> pHeaders,
Dictionary<string, string[]> pPostParams, CompletionHandler pCompletionHandler)
{
HttpWebRequest vWebReq = null;
HttpWebResponse vWebResp = null;
try
{
vWebReq = (HttpWebRequest)WebRequest.Create(pUrl);
}
catch (Exception ex)
{
if (pCompletionHandler != null)
{
pCompletionHandler(ResponseInfo.invalidRequest(ex.Message), "");
}
return;
}
try
{
vWebReq.UserAgent = this.getUserAgent();
vWebReq.AllowAutoRedirect = false;
vWebReq.Method = "POST";
vWebReq.ContentType = FORM_MIME_URLENCODED;
if (pHeaders != null)
{
foreach (KeyValuePair<string, string> kvp in pHeaders)
{
if (!kvp.Key.Equals("Content-Type"))
{
vWebReq.Headers.Add(kvp.Key, kvp.Value);
}
}
}
// format the post body
StringBuilder vPostBody = new StringBuilder();
if (pPostParams != null)
{
foreach (KeyValuePair<string, string[]> kvp in pPostParams)
{
foreach (string vVal in kvp.Value)
{
vPostBody.AppendFormat("{0}={1}&",
Uri.EscapeDataString(kvp.Key), Uri.EscapeDataString(vVal));
}
}
// write data
vWebReq.AllowWriteStreamBuffering = true;
using (Stream vWebReqStream = vWebReq.GetRequestStream())
{
vWebReqStream.Write(Encoding.UTF8.GetBytes(vPostBody.ToString()),
0, vPostBody.Length - 1);
vWebReqStream.Flush();
}
}
//fire request
vWebResp = (HttpWebResponse)vWebReq.GetResponse();
handleWebResponse(vWebResp, pCompletionHandler);
}
catch (WebException wexp)
{
// FIX-HTTP 4xx/5xx Error 2016-11-22, 17:00 @fengyh
HttpWebResponse xWebResp = wexp.Response as HttpWebResponse;
handleErrorWebResponse(xWebResp, pCompletionHandler, wexp);
}
catch (Exception exp)
{
handleErrorWebResponse(vWebResp, pCompletionHandler, exp);
}
finally
{
if (vWebResp != null)
{
vWebResp.Close();
vWebResp = null;
}
if (vWebReq != null)
{
vWebReq.Abort();
vWebReq = null;
}
}
}