Покажите пример многопоточной отправки POST запросов - C#
Формулировка задачи:
Суть проблемы - нужно пролайкать профили пользователей на одном сайте.
Я успешно авторизуюсь и сохраняю куки в
Далее мне нужно открыть одну страницу и спарсить оттуда секретный ключ, а потом отправить POST запрос, в котором этот секретный ключ используется. В многопоточном (асинхронном) режиме.
Т.е. Прошу показать, как сделать POST запросы к странице в многопоточном режиме.
Реализация GET и POST методов:
static CookieContainer container = new CookieContainer();
public static string Post(string url, string data, bool clearCookie, ref CookieContainer container, bool allow_redirect = true, WebProxy proxy = null)
{
string output = null;
try
{
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url);
if (clearCookie) WebReq.CookieContainer = new CookieContainer();
else WebReq.CookieContainer = container;
byte[] buffer = Encoding.UTF8.GetBytes(data);
WebReq.Method = "POST";
WebReq.AllowAutoRedirect = allow_redirect;
WebReq.ContentType = "application/x-www-form-urlencoded";
WebReq.ContentLength = buffer.Length;
Stream PostData = WebReq.GetRequestStream();
PostData.Write(buffer, 0, buffer.Length);
PostData.Close();
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
Stream Answer = WebResp.GetResponseStream();
container = WebReq.CookieContainer;
StreamReader _Answer = new StreamReader(Answer, Encoding.UTF8);
output = _Answer.ReadToEnd();
return output.Trim() + "\n";
}
catch (Exception ex)
{
return ex.Message;
}
}
public static string Get(string url, bool clearCookie, ref CookieContainer container, WebProxy proxy = null)
{
string output = null;
try
{
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(url);
if (clearCookie) WebReq.CookieContainer = new CookieContainer();
else WebReq.CookieContainer = container;
WebReq.Method = "GET";
WebReq.AllowAutoRedirect = true;
WebReq.ContentType = "application/x-www-form-urlencoded";
HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
Stream Answer = WebResp.GetResponseStream();
container = WebReq.CookieContainer;
StreamReader _Answer = new StreamReader(Answer, Encoding.UTF8);
output = _Answer.ReadToEnd();
return output.Trim() + "\n";
}
catch (Exception ex)
{
return ex.Message;
}
}Решение задачи: «Покажите пример многопоточной отправки POST запросов»
textual
Листинг программы
class Program
{
static void Main(string[] args)
{
ВызывающийМетод();
Console.WriteLine("После асинк");
Console.Read();
}
static async void ВызывающийМетод()
{
//Итак, теперь await запускает метод
//Приостанавливает все действия после него
//Возвращает работу вызывающему коду - то есть Main'у
//Ну и распаковывает Task<string> в string
string строка = await Метод();
Console.WriteLine(строка);
}
/// <summary>
/// Этот метод реализует действия в новом потоке
/// с помощью Task.Run
/// </summary>
/// <returns>возвращает Task<string></returns>
static async Task<string> Метод()
{
return await Task.Run<string>(() =>
{
Thread.Sleep(3000);
return "Тест";
});
}
}