現在、PHPcURLを使用して2つのフォームを送信しています。両方のフォームは異なるページにあります(1つのフォームに入力すると、別のフォームにリダイレクトされます)。最初のフォームと2番目のフォームを送信するためのcURLを取得します。ただし、2番目のフォーム(送信後)には、1つの値(必要な値)が設定されていないことが示されています。明らかに、これは値が設定されていないことを意味します。しかし、私は変数を正しく設定していると思います。ここにフォーム全体を貼り付けることはできません(制限を超えています..)が、送信用に設定されていない値は次のとおりです。
<select name="sel_subj" size="10" multiple="" id="subj_id">
<option value="ACAD">Academic Foundations
</option>
.. a lot more options
</select>
これが私のコードです:
function submitForms() {
//first form...
$data_fields = array (
'p_term' => '201610',
'p_calling_proc' => 'bwckschd.p_disp_dyn_sched'
);
$curl_connection = curl_init ();
curl_setopt ( $curl_connection, CURLOPT_CONNECTTIMEOUT, 30 );
curl_setopt ( $curl_connection, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" );
curl_setopt ( $curl_connection, CURLOPT_URL, 'https://banner.uregina.ca/prod/sct/bwckgens.p_proc_term_date' );
curl_setopt ( $curl_connection, CURLOPT_RETURNTRANSFER, true );
curl_setopt ( $curl_connection, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt ( $curl_connection, CURLOPT_FOLLOWLOCATION, 1 );
curl_setopt ( $curl_connection, CURLOPT_POSTFIELDS, $data_fields );
// perform our request
$result = curl_exec ( $curl_connection );
// show information regarding the request
print_r ( curl_getinfo ( $curl_connection ) );
echo "<br>";
echo curl_errno ( $curl_connection ) . '-' . curl_error ( $curl_connection );
echo "<br>";
echo $result;
//Second form..
$data_fields = array (
'term_in' => '201630',
'sel_to_cred' => '',
'sel_title' => '',
'sel_subj' => 'ACAD',
'sel_subj' => 'dummy',
'sel_sess' => 'dummy',
'sel_schd' => '%',
'sel_schd' => 'dummy',
'sel_ptrm' => '%',
'sel_ptrm' => 'dummy',
'sel_levl' => '%',
'sel_levl' => 'dummy',
'sel_instr' => '%',
'sel_instr' => 'dummy',
'sel_insm' => '%',
'sel_insm' => 'dummy',
'sel_from_cred' => '',
'sel_day' => 'dummy',
'sel_crse' => '',
'sel_camp' => '%',
'sel_camp' => 'dummy',
'sel_attr' => 'dummy',
'end_mi' => '0',
'end_hh' => '0',
'end_ap' => 'a',
'begin_mi' => '0',
'begin_hh' => '0',
'begin_ap' => 'a'
);
curl_setopt ( $curl_connection, CURLOPT_URL, 'https://banner.uregina.ca/prod/sct/bwckschd.p_get_crse_unsec' ); // use the URL that shows up in your <form action="...url..."> tag
curl_setopt ( $curl_connection, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt ( $curl_connection, CURLOPT_POSTFIELDS, $data_fields );
$result = curl_exec ( $curl_connection );
echo "<br>";
echo $result;
return $curl_connection;
}
フォームを手動で送信したときのPOST変数は次のとおりです(firebugから)。
ただし、上記の関数を使用すると、最初のフォームを問題なく通過し、2番目のフォームにアクセスして送信すると、「少なくとも1つのサブジェクトを選択する必要があります。」という結果が返されます。'sel_subj'を選択しなかったかのように。
'sel_subj'データが設定された状態で送信されない理由がわかりません。どんな助けでも大歓迎です。
最初のフォームへのリンク:https://banner.uregina.ca/prod/sct/bwckschd.p_disp_dyn_sched
2番目のフォームは、最初のフォームの完了後にのみ、直接リンクすることはできません。
私にとってうまくいったのは、パラメータの送信方法を変更することでした。(GETのような文字列形式に変更されました)
$data = "term_in=201630&sel_subj=dummy&sel_day=dummy&sel_schd=dummy&sel_insm=dummy&sel_camp=dummy&sel_levl=dummy&sel_sess=dummy&sel_instr=dummy&sel_ptrm=dummy&sel_attr=dummy&sel_subj=ADMN&sel_crse=&sel_title=&sel_schd=%25&sel_insm=%25&sel_from_cred=&sel_to_cred=&sel_camp=%25&sel_levl=%25&sel_ptrm=%25&sel_instr=%25&begin_hh=0&begin_mi=0&begin_ap=a&end_hh=0&end_mi=0&end_ap=a";
次に、次のように使用しました。
curl_setopt ( $curl_connection, CURLOPT_POSTFIELDS,$data);
このサイトからの指示に従って:
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加