C # http после ответа возвращает действительный файл cookie, но в браузере отображается ошибка сценария / истек срок сеанса - PullRequest
0 голосов
/ 03 июня 2019

Кодирование бота, чтобы подписать меня на список курсов в моем университете, для которых в конце меня перенаправляют на сайт платежного сервиса.

Мне удалось войти в систему, добавить курсы и установить необходимые флажки через HTTP POST, хотя я полностью застрял в последней форме ввода, которая должна перенаправить меня в сервис Paymet. (на данный момент я закодировал обходной путь, используя WebBrowser и HtmlElement.InvokeMember («click»), просто так, чтобы он работал на время)

Попытка использования сетевого анализа firefox для проверки параметров POST, хотя там отображается только «_ul: 1». Если я сравниваю файл cookie из Firefox (щелкая вручную) с файлом cookie, полученным из моего кода C # через response.Headers ["Set-cookie"], они, похоже, совпадают по своему шаблону. Поэтому я считаю, что полученное мной печенье действительно.

html section («asdf1234» - это заполнитель для скрытого значения):

<form target="_top" method="post" action="https://payments.kalixa.com/Checkout/PaymentMethods/" name="formular">
    <div class="alert alert-warning">
        <p style="text-align:center">
            <input class="btn btn-primary" type="submit" value="Next"/>
        </p>
    </div>
    <input type="hidden" value="asdf1234" name="requestData"/>
    <script language="JavaScript">
        //document.formular.submit();
    </script>
</form>

c # раздел:

string formUrl = redirectUrl;
string formParams = string.Format("requestData={0}", "asdf1234");
request = WebRequest.Create(formUrl);
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
request.ContentLength = bytes.Length;
using (Stream os = request.GetRequestStream())
{
    os.Write(bytes, 0, bytes.Length);
}
response = request.GetResponse();
cookieHeader = response.Headers["Set-cookie"];


using (StreamReader sr = new StreamReader(response.GetResponseStream(), enc))
{
    pageSource = sr.ReadToEnd();
}

response.Close();

Ошибка, которую я получаю, - это сначала окно сообщения с заголовком «ошибка скрипта», строка «5», символ «2», ошибка «Значение свойства« $ »равно нулю или не определено, объект-функция отсутствует» (переведено с немецкого языка) ) код "0"

После нажатия «да» или «нет» переменная pageSource содержит HTML-код целевой страницы с истекшим сроком действия.

...