我想获得一个网站的回复,该网站的结果是由表单发布的。我尝试过使用WebClient,WebRequests等。
当前代码:
using (var client = new WebClient())
{
var buffer = client.UploadValues("https://secure.monroecc.edu/pls/bpr1/bwzkfcls.P_GetCrse", "POST", vals);
return Encoding.UTF8.GetString(buffer, 0, buffer.Count());
}
也很确定当前代码没有错,它只是遗漏了一些东西。当我得到网站的回复时,这是错误的,这是你填写表格的页面。
如果您尝试获取网站,则会在网站上导致此错误(不会发布随附的变量):
VARIABLES IN FORM NOT IN PROCEDURE:
NON-DEFAULT VARIABLES IN PROCEDURE NOT IN FORM: TERM_IN,SEL_SUBJ,SEL_CRSE,SEL_TITLE,BEGIN_HH,BEGIN_MI,BEGIN_AP,SEL_DAY,SEL_PTRM,END_HH,END_MI,END_AP,SEL_CAMP,SEL_SCHD,SEL_SESS,SEL_INSTR,SEL_ATTR,SEL_LEVL,SEL_INSM
DAD name: bpr1
PROCEDURE : bwzkfcls.P_GetCrse
URL : http://secure.monroecc.edu:63500/pls/bpr1/bwzkfcls.P_GetCrse
PARAMETERS :
===========
这是发送请求的图像。 (使用Chrome查看)
我知道该网站使用了oracle PLSQL,但这似乎并没有帮助我检索搜索结果。
答案 0 :(得分:0)
使用GET请求而不是POST。
答案 1 :(得分:0)
当你从未真正接收到可以使结果成为可能的表单变量时,你要求一个表单后面的页面给你一个结果集。
你应该传递变量集的变量vals
永远不会。
VARIABLES IN FORM NOT IN PROCEDURE:
NON-DEFAULT VARIABLES IN PROCEDURE NOT IN FORM: TERM_IN,SEL_SUBJ,SEL_CRSE,SEL_TITLE,BEGIN_HH,BEGIN_MI,BEGIN_AP,SEL_DAY,SEL_PTRM,END_HH,END_MI,END_AP,SEL_CAMP,SEL_SCHD,SEL_SESS,SEL_INSTR,SEL_ATTR,SEL_LEVL,SEL_INSM
此响应错误表明它从未收到任何列出的变量。我会在您的代码中追溯到您所在的位置,并将您的变量列表分配给Collection vals
。检查拼写是否正确以及正确分配。
答案 2 :(得分:0)
我使用以下代码发布了表单:
private void Run(string[] args)
{
NameValueCollection vals = new NameValueCollection();
vals.Add("TERM_IN", "");
vals.Add("SEL_SUBJ", "");
vals.Add("SEL_CRSE", "");
vals.Add("SEL_TITLE", "");
vals.Add("BEGIN_HH", "");
vals.Add("BEGIN_MI", "");
vals.Add("BEGIN_AP", "");
vals.Add("SEL_DAY", "");
vals.Add("SEL_PTRM", "");
vals.Add("END_HH", "");
vals.Add("END_MI", "");
vals.Add("END_AP", "");
vals.Add("SEL_CAMP", "");
vals.Add("SEL_SCHD", "");
vals.Add("SEL_SESS", "");
vals.Add("SEL_INSTR", "");
vals.Add("SEL_ATTR", "");
vals.Add("SEL_LEVL", "");
vals.Add("SEL_INSM", "");
using (var client = new WebClient())
{
var buffer = client.UploadValues("https://secure.monroecc.edu/pls/bpr1/bwzkfcls.P_GetCrse", "POST", vals);
Console.WriteLine(Encoding.UTF8.GetString(buffer, 0, buffer.Count()));
//Console.Read();
}
}
它返回200状态代码和有效的html,表明表单已正确接收。但是,由于没有一个值是正确的,返回的页面表示必须包含一个缺少的表单元素(NAME NOT FOUND FOR PIDM:)
您正在接收的参数不匹配错误意味着您传入的参数不是存储过程所需的参数。您需要首先获得参数和期望值的确切列表,然后您可以将它们插入,这应该可行。不幸的是,该页面返回200状态代码,因此您必须以某种方式解析是否存在错误。