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.

78 lines
2.7 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
namespace AutoUpdater
{
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/x-www-form-urlencoded";
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[] bytes = encoding.GetBytes(data);
requestStream.Write(bytes , 0 , bytes.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[4096];
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;
}
}
}
}