You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.7 KiB
C#

9 months ago
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
namespace POSV.Utils
{
public class RequestUtils
{
public static string Post(string url, SortedList<string, string> parameters)
{
var sb = new StringBuilder();
foreach (var item in parameters)
{
if (sb.ToString().Length != 0)
{
sb.Append("&");
}
var key = Uri.EscapeDataString(item.Key).Replace("%20", "+");
var value = Uri.EscapeDataString(item.Value).Replace("%20", "+");
sb.Append(key + "=" + value);
}
MemoryStream request = RequestUtils.Post(url, sb.ToString());
return System.Text.Encoding.UTF8.GetString(request.ToArray());
}
public static MemoryStream Post(string url, string data)
{
return Post(url, data, Encoding.UTF8);
}
public static MemoryStream Post(string url, string data, Encoding encoding)
{
return Post(url, data, 10000, Encoding.UTF8);
}
public static MemoryStream Post(string url, string data, int timeout, Encoding encoding)
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.ContentType = "application/json";
webRequest.Method = "POST";
webRequest.Timeout = timeout;
WriteRequestStream(ref webRequest, data, encoding);
return GetResponseStream(ref webRequest);
}
private static void WriteRequestStream(ref HttpWebRequest webRequest, string data, Encoding encoding)
{
using (Stream requestStream = webRequest.GetRequestStream())
{
byte[] bArray = encoding.GetBytes(data);
requestStream.Write(bArray, 0, bArray.Length);
requestStream.Close();
}
}
private static MemoryStream GetResponseStream(ref HttpWebRequest webRequest)
{
using (WebResponse webResponse = webRequest.GetResponse())
{
Stream stream = webResponse.GetResponseStream();
MemoryStream memoryStream = new MemoryStream();
byte[] bs = new byte[256];
for (int j = stream.Read(bs, 0, (int)bs.Length); j > 0; j = stream.Read(bs, 0, (int)bs.Length))
{
memoryStream.Write(bs, 0, j);
}
stream.Close();
memoryStream.Position = (long)0;
return memoryStream;
}
}
}
}