Я пытаюсь вызвать URL, который должен вернуть токен аутентификации. Данные публикуются по URL-адресу, и после ряда перенаправлений возвращает объект JSON с токеном. Я использую C # и WPF.
Вот выдержка из того, что я делаю:
HttpWebRequest request1 = (HttpWebRequest)WebRequest.Create(action);
request1.Method = "POST";
StringBuilder sb = new StringBuilder();
String boundary = "-----------------------------1721856231228";
foreach (elem in elems)
{
String nameStr = elem.GetAttribute("name");
if (nameStr != null && nameStr.Length != 0)
{
String valueStr = elem.GetAttribute("value");
sb.Append("\r\n" + boundary + "\r\n");
sb.Append("Content-Disposition: form-data; name=\"" + nameStr + "\"" + "\r\n");
sb.Append("\r\n");
sb.Append(valueStr);
}
}
sb.Append("\r\n--" + boundary + "--" + "\r\n");
String postData1 = sb.ToString();
request1.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3";
request1.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36";
request1.ContentType = "application/x-www-form-urlencoded; boundary=" + boundary;
request1.ContentLength = postData1.Length;
request1.KeepAlive = true;
request1.AllowAutoRedirect = true;
StreamWriter w = new StreamWriter(request1.GetRequestStream());
w.Write(postData1);
w.Close();
HttpWebResponse response1 = (HttpWebResponse)request1.GetResponse();
StreamReader reader1 = new StreamReader(response1.GetResponseStream());
String responseText1 = reader1.ReadToEnd();
reader1.Close();
response1.Close();
Но ответ не содержит JSON с токеном. Я использую Fiddler и могу сделать паузу в конце приведенного выше кода, и URI, который должен иметь JSON, не был вызван. Я могу продолжить выполнение другого кода в отладчике, а затем Fiddler покажет URI как вызванный, и всплывающее окно File Download позволяет мне затем загрузить JSON-файл, который содержит токен. Мне не нужно всплывающее окно, и я хочу иметь возможность программно собирать данные JSON.
Я обнаружил, добавив следующую строку в конец кода выше и просто выполнив эту строку в отладчике,что Fiddler сообщит, что URL токена был вызван (и я вижу в Fiddler правильный ответ JSON):
System.Windows.Forms.Application.DoEvents();
Но я не знаю, как получить доступ к этому ответу или как замкнуть накоротковсплывающее окно загрузки файла не происходит.
Может быть, что-то в настройке KeepAlive поможет?