Как получить параметр и отправить его с данными в том же запросе в C # - PullRequest
0 голосов
/ 02 июня 2018

У меня есть страница, которая генерирует код (токен) для каждой попытки перезагрузки.Итак, первая идея состояла в том, чтобы создать 2 объекта WebClient, первый для получения кода, а второй - для отправки кода на ту же страницу с другими параметрами публикации.Проблема в том, что он не может работать, потому что во втором запросе код (токен) будет отличаться от первого, поэтому он будет неправильным.Как я могу получить токен и отправить его с другими параметрами в одном запросе, чтобы сделать его законным?

Первый запрос:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

CookieContainer cookies = new CookieContainer();

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.CookieContainer = cookies;
request.AutomaticDecompression = DecompressionMethods.GZip;
request.Accept = "*/*";
request.Headers.Add("Accept-Encoding", "gzip, deflate, sdch, br");
request.Headers.Add("Accept-Language", "it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4");
request.KeepAlive = true;
request.Method = "GET";
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0";
request.Timeout = 10000;

using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
    html = reader.ReadToEnd();
    re_id = response.Headers.Get("req_id");
}

string token = getBetween(html, "name=\"token\" value=\"", "\" ");

Второй запрос

HttpWebRequest login = (HttpWebRequest)WebRequest.Create(url);
login.CookieContainer = cookies;
login.AutomaticDecompression = DecompressionMethods.GZip;
login.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
login.Headers.Add("Accept-Encoding","gzip, deflate, br");
login.Headers.Add("Accept-Language","it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4");
login.KeepAlive = true;
login.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36";
login.ContentType = "application/x-www-form-urlencoded";
login.Headers.Add("req_id", re_id);
login.Method = "POST";
login.Timeout = 10000;

string postData = "myparameters=toset&token=" + token;  
byte[] byteArray = Encoding.UTF8.GetBytes (postData);  

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
login.ContentLength = byteArray.Length;  

Stream dataStream = login.GetRequestStream ();  
dataStream.Write (byteArray, 0, byteArray.Length);  
dataStream.Close ();  

WebResponse resp = login.GetResponse ();  
Console.WriteLine (((HttpWebResponse)resp).StatusDescription);  
dataStream = resp.GetResponseStream ();  
StreamReader read = new StreamReader (dataStream);  

string responseFromServer = read.ReadToEnd ();  
Console.WriteLine (responseFromServer);   

read.Close ();  
dataStream.Close ();  
resp.Close ();  
...