2012-08-09 52 views
0

我的大学网站有一个搜索表单来访问课程列表。您选择一系列标准(教师,学期等),然后按“获取课程部分”,并显示符合条件的所有课程。我想获得所有的课程,所以我想弄清楚如何用我自己的参数直接调用该按钮。我对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.P_GetCrse”发送“POST”请求。不知何故,它也传递一些参数到该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> 
+0

虽然它看起来很平凡,你可以发布'checkSubmit'的代码吗? – jbabey 2012-08-09 15:37:48

+0

@ jbabey没问题。 – Lanaru 2012-08-09 15:42:40

回答

0

我想通了。感谢你的答案,他们有一些帮助,但我必须做更多的挖掘才能找出所需的确切签名。

我所做的是在Chrome中打开开发者工具(Ctrl + Shift + I),并切换到网络选项卡。在那里我可以监控所有的网络活动。然后我按下了“获取课程部分”按钮。瞧,我看到了POST请求弹出!

我点击它,发现所有参数在标题“表单数据”下的请求中传递。我将它们重写为url?p1:v1 & p2:v2 ...格式,并在浏览器中打开了完整的URL。成功!没有CURL必要。

0

在你的榜样的形式传递在<input type="hidden" ../>领域脚本给出的所有参数。在您的示例代码中,没有涉及JavaScript(但是CheckSubmit()),但我认为JavaScript用于设置这些输入字段的值。

您最好的机会是提交所有这些文件,并只修改符合您的搜索条件的文件。

要手动发出请求,您可以使用来自linux/unix控制台的工具,如curl

+0

这是通常的工作原理,类型为“隐藏”的输入元素是作为POST请求参数传递的元素吗? – Lanaru 2012-08-09 15:33:47

+1

@Lanaru所有''字段,被'

'标记包围的字段作为参数传递。 ''只是那些,你不会在UI中看到(因此它们被隐藏)。还可能有其他人喜欢''或''。 – Sirko 2012-08-09 15:36:25

0

为了伪造呼叫到服务器,您需要打开一个POST调用页面。你不能从浏览器中做到这一点。您可以使用服务器端代码或类似

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。如果是这种情况,您将不得不将cookies从浏览器添加到CURL呼叫。检查CURL文档如何做到这一点。

您也可以在具有卷曲库的服务器代码中执行此操作。

1

当提交form时,表单中的所有字段都会提交给服务器。在你的表单中你有一堆隐藏的字段,并且所有这些隐藏字段在POST请求中作为参数传递给服务器。

喜欢的东西

/pban1/bwskfcls.P_GetCrse?term_in=201209&sel_subj=dummy... 

服务器他们(貌似)调用带参数的存储过程(剥离有dummy作为值的参数后,大概)。

错误说

MANY PROCEDURES MATCH NAME, BUT NONE MATCHES SIGNATURE (parameter names)

如此看来已经有一些组参数定义的过程,但不是所有的。因此,可能有一个存储过程用facultyterm作为输入进行搜索,但没有只用于faculty