编写一个机器人来登录我的大学课程列表,最终我被重定向到付款服务站点。
我可以通过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。