C#http发布响应返回有效的cookie,但浏览器显示脚本错误/会话已过期

时间:2019-06-03 16:09:55

标签: c# forms http post submit

编写一个机器人来登录我的大学课程列表,最终我被重定向到付款服务站点。

我可以通过HTTP POST登录,添加课程并选中必要的复选框,尽管它完全停留在应该将我重定向到Paymet服务的最后一个输入表单中。 (目前,我使用WebBrowser和HtmlElement.InvokeMember(“ click”)编写了一种变通方法,以使其暂时可用)

尝试使用firefox网络分析来检查POST参数,尽管那里仅显示“ _ul:1”。 如果我比较来自firefox(手动单击)的cookie和通过响应.Headers [“ Set-cookie”]从我的C#代码中获得的cookie,它们似乎在模式上匹配。因此,我相信我实际获得的Cookie是有效的。

html部分(“ 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”错误“属性“ $”的值为null或未定义,没有函数对象”(德语翻译) )代码“ 0”

单击是或否后,pageSource变量将包含会话过期的登录页面的html。

0 个答案:

没有答案