2012-08-09 53 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