如何获取方法签名
How to get method signature
我的大学网站有一个搜索表单来访问课程列表。您选择一堆标准(教师,学期等),然后按"获取课程部分",它会显示与给定标准匹配的所有课程。我想获取所有课程,所以我想弄清楚如何使用自己的参数直接调用该按钮。我对HTML和javascript的了解很少,但我认为我正在取得一些进展。这是相关的(我认为)来源:
<form action="/pban1/bwskfcls.P_GetCrse" method="POST" onsubmit="return checkSubmit()">
<br>
<input type="hidden" name="term_in" value="201209">
<input type="hidden" name="sel_subj" value="dummy">
<input type="hidden" name="sel_day" value="dummy">
<input type="hidden" name="sel_schd" value="dummy">
<input type="hidden" name="sel_insm" value="dummy">
<input type="hidden" name="sel_camp" value="dummy">
<input type="hidden" name="sel_levl" value="dummy">
<input type="hidden" name="sel_sess" value="dummy">
<input type="hidden" name="sel_instr" value="dummy">
<input type="hidden" name="sel_ptrm" value="dummy">
<input type="hidden" name="sel_attr" value="dummy">
<table class="dataentrytable" summary="Table is used to present the course search criteria" .. </table>
<br>
<input type="submit" value="Get Course Sections">
<input type="reset" value="Reset">
</form>
我理解它的方式(我很容易出错),当你按下按钮时,它会调用函数 checkSubmit()(它有简单的代码),然后向"/pban1/bwskfcls"提交"POST"请求。P_GetCrse"。不知何故,它还会将一些参数传递给该 URL(它是 javascript 吗?.PHP?没有线索)。
如果我尝试将调用的网址放在地址栏中,https://banweb.mcgill.ca/pban1/bwskfcls.P_GetCrse
它会打开一个页面,并显示以下错误:
mod_plsql: /pban1/bwskfcls.P_GetCrse HTTP-404 bwskfcls.P_GetCrse: MANY PROCEDURES MATCH NAME, BUT NONE MATCHES SIGNATURE (parameter names)
所以我明白我没有传递正确的参数。我必须传递哪些参数,我该怎么做?
如果需要任何其他来源,我很乐意发布它。任何输入或澄清都值得赞赏,我只是通过反复试验和大量谷歌搜索未知术语才能达到这一点。
编辑:这是 checksubmit() 的代码
<script language="JavaScript" type="text/javascript">
<!-- Hide JavaScript from older browsers
var submitcount=0;
function checkSubmit() {
if (submitcount == 0)
{
submitcount++;
return true;
}
else
{
alert("Your changes have already been submitted.");
return false;
}
}
// End script hiding -->
</script>
提交form
时,表单中的所有字段都将提交到服务器。在您的表单中,您有一堆隐藏字段,所有这些隐藏字段都作为参数在 POST 请求中传递给服务器。
类似的东西
/pban1/bwskfcls.P_GetCrse?term_in=201209&sel_subj=dummy...
服务器它们(看起来像)调用带有参数的存储过程(大概是在剥离了以dummy
为值的参数之后)。
错误说
许多过程与名称匹配,但没有一个与签名匹配(参数 名称)
因此,看起来已经为某些参数集定义了过程,但不是所有参数。因此,可能有一个存储过程可以使用faculty
和term
作为输入进行搜索,但没有一个仅用于faculty
。
表单将<input type="hidden" ../>
字段中给出的所有参数传递给脚本。在您的示例代码中,不涉及JavaScript(但CheckSubmit()
),但我假设JavaScript用于设置这些输入字段的值。
您最好的机会是提交所有这些,然后修改符合您的搜索条件的那些。
要手动发出请求,您可以使用 linux/unix 控制台中的 curl 等工具。
为了伪造对服务器的调用,您需要使用 POST 调用打开页面。您无法从浏览器中执行此操作。您可以使用服务器端代码或 CURL 请求,例如
CURL -X POST -d 'term_in=201209&sel_subj=dummy&sel_day=dummy&sel_schd=dummy......' https://banweb.mcgill.ca/pban1/bwskfcls.P_GetCrse
将虚拟人替换为正确的值并替换...与其余值。这是假设网站没有检查cookie。如果是这种情况,您必须将浏览器中的 cookie 添加到 CURL 调用中。查看 CURL 文档了解如何执行此操作。
您也可以在具有 curl 库的服务器代码中执行此操作。
我想通了。感谢您的回答,它们有一些帮助,但我不得不做更多的挖掘才能找出所需的确切签名。
我所做的是在Chrome中打开开发人员工具(Ctrl + Shift + I),然后切换到网络选项卡。在那里,我能够监视所有网络活动。然后我按下了"获取课程部分"按钮。你瞧,我看到弹出了 POST 请求!
我单击它,发现在标题"表单数据"下请求中传递的所有参数。我在url?p1:v1&p2:v2...格式,并在我的浏览器中打开了完成的 URL。成功!无需卷曲。
- 骨干's Router.execute(callback,args,name)方法获取未定义的名称
- Get方法获取csv文件的内容
- 从 Rails dom_id 方法获取 HTML 类名
- 如何从发布方法获取数据后重定向
- 使用jQuery.attr()方法获取元素属性
- 如何通过 .ajax() jQuery 方法获取 Carrierwave 上传到 Amazon S3 的图像的 URL
- jQuery / Javascript方法获取当前页面的标题,将其与字符串匹配,将类分配给该特定元素
- 无法使用 jquery 方法获取属性值
- 如何通过 php 表中的 post 方法获取值,并在表中获取替换前一个表的值
- 如何从findOneAndUpdate方法获取更新的文档
- 在下划线js,我可以在输入后使用弹拨方法获取多列,其中方法作为linq选择投影
- 使用 jQuery $.post() 方法获取另一个网页的一部分
- 节点.js类型错误:对象没有方法获取
- 在 JSF 中,如何在使用后备 Bean 方法获取值后调用 java 脚本
- 使用GWT'从java方法获取返回值;s JSNI
- 描述从回调方法获取正确的作用域
- 从Jquery$.getJSON方法获取数组的全局数组到REUSE数组
- 从angular post方法获取数据
- 在JavaScript中为自己的日期方法获取ReferenceError
- 如何使用moment.jsfromNow方法获取天数