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()(簡単なコードがあります)が呼び出され、「POST」リクエストが「/pban1/bwskfcls.P_GetCrse」に送信されます。どういうわけかそれはまたそのURLにいくつかのパラメータを渡します(それはjavascriptですか?PHP?手がかりはありません)。

呼び出されたURLをアドレスバーに配置しようとする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>
4

4 に答える 4

1

form送信されると、フォーム内のすべてのフィールドがサーバーに送信されます。フォームにはたくさんの非表示フィールドがあり、これらの非表示フィールドはすべて POST リクエストでパラメーターとしてサーバーに渡されます。

何かのようなもの

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

それらのサーバーは、パラメーターを使用してストアドプロシージャを呼び出します(おそらくdummy、値として含まれるパラメーターを削除した後)。

エラーは言う

多くのプロシージャーは名前に一致しますが、署名 (パラメーター名) に一致するプロシージャーはありません

そのため、すべてではなく、一部のパラメーターセットに対して既に定義されているプロシージャがあるようです。そのため、入力として検索facultyを実行するストアド プロシージャが存在する可能性がありますが、 .termfaculty

于 2012-08-09T15:41:14.390 に答える
0

<input type="hidden" ../>この例のフォームは、フィールドで指定されたすべてのパラメーターをスクリプトに渡します。サンプルコードにはJavaScriptは含まれていませんが(ただしCheckSubmit())、JavaScriptを使用してこれらの入力フィールドの値を設定していると思います。

最善のチャンスは、それらすべてを送信し、検索条件に一致するものを変更することです。

手動でリクエストを発行するには、linux/unixコンソールからcurlなどのツールを使用できます。

于 2012-08-09T15:32:15.313 に答える
0

私はそれを考え出した。答えてくれてありがとう、彼らはいくらか助けになりましたが、必要な正確な署名を把握するためにさらに掘り下げる必要がありました.

私がしたことは、Chrome で開発者ツールを開き (Ctrl+Shift+I)、ネットワーク タブに切り替えたことです。そこで、すべてのネットワーク アクティビティを監視できました。次に、「コースセクションを取得」ボタンを押しました。見よ、POSTリクエストがポップアップするのを見た!

それをクリックすると、ヘッダー「フォームデータ」の下のリクエストで渡されるすべてのパラメーターが見つかりました。url?p1:v1&p2:v2... の形式で書き直して、完成した URL をブラウザで開いてみました。成功!CURL は必要ありません。

于 2012-08-09T17:47:16.543 に答える
0

サーバーへの呼び出しを偽装するには、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 ライブラリを持つサーバー コードでも実行できます。

于 2012-08-09T15:40:07.570 に答える