【问题标题】:Unable to get right Website response with POST?无法通过 POST 获得正确的网站响应?
【发布时间】:2012-09-30 01:36:29
【问题描述】:

我想获得通过表单发布结果的网站的响应。我尝试过使用 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,但这似乎并不能帮助我检索搜索结果。

【问题讨论】:

  • “获取网站的源代码”是什么意思。根据定义,这是不可能的。对服务器的 HTTP 请求将返回由服务器组装的数据流,其类型将由 Content-type 标头指示。当您发布请求时,您必须说明您期望返回的内容。
  • @JimGarrison source 真的应该意味着响应,当我发送我的 POST 请求时,我希望得到带有类列表的响应。我希望澄清一下,编辑我的问题。

标签: html post web plsql get


【解决方案1】:

我使用以下代码发布了表单:

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,表明表单被正确接收。然而,由于没有一个值是正确的,返回的页面表明缺少必须包含的表单元素(PIDM 未找到名称:)

您收到的参数不匹配错误意味着您传入的参数不是存储过程期望的参数。您需要首先获得参数和预期值的确切列表,然后您可以将它们插入,这应该可以工作。不幸的是,该页面返回 200 状态代码,因此您必须以某种方式解析出是否存在错误。

【讨论】:

  • 好的,但不知道你在做什么。我的问题中的 chrome 表单数据图像为此提供了值,但我仍然得到错误的页面响应。我知道我正在尝试对此进行一些逆向工程,但不幸的是它并不顺利。
  • 这意味着错误来自存储过程而不是Web服务器。您需要知道存储过程需要哪些参数才能使其工作。我的印象是您无法控制服务器或无法访问数据库来检查存储过程。我怀疑是否有办法查询参数,因为这可能会被视为数据库的安全风险。
  • 对,所以即使网站给了我程序中的非默认变量而不是形式,它们可能不是所有的变量?
【解决方案2】:

使用 GET 请求而不是 POST。

【讨论】:

  • @Nate,这是一个问题还是一个陈述?
【解决方案3】:

您要求一个跟随表单的页面为您提供一个结果集,但它实际上从未接收到使结果成为可能的表单变量。

您的变量 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

此响应错误表示它从未收到任何列出的变量。我会在您的代码中追溯到您命名并将变量列表分配给集合vals 的位置。检查正确的拼写和正确的分配。

【讨论】:

  • 我应该注意,当我运行它时,我确实在第一个代码块中传递了带有 vals 的变量,我会得到实际的页面,但是错误的页面。当我不包含页面 404 与该数据一起显示的变量时
  • 我在我的问题中说过(没有发布随之而来的变量):
猜你喜欢
  • 2013-02-08
  • 2022-06-23
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 2019-04-27
相关资源
最近更新 更多