簡體   English   中英

PHP cURL表單值已設置,但未設置提交返回值

[英]PHP cURL form value set but submit returns value not set

我目前正在使用PHP cURL提交兩種形式。 兩種形式都在不同的頁面上(填寫一種形式后,您將被重定向到另一種形式)。 我得到cURL提交第一個表格和第二個表格。 但是,第二種形式(提交后)告訴我未設置一個值(所需值)。 顯然,這對我來說意味着沒有設置該值。 但是,我相信我正確設置了變量。 我無法在此處粘貼整個表單(超出限制..),但是此處未設置要提交的值:

     <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;
}

這是我手動提交表單(來自Firebug)時的POST變量:

POST變量

但是,當我使用上述功能時,它會順利通過第一種形式,然后單擊第二種形式,然后提交,然后返回結果,說“您必須選擇至少一個主題”。 好像我沒有選擇'sel_subj'。

我不知道為什么它不提交“ sel_subj”數據作為我設置的數據。 任何幫助將不勝感激。

鏈接到第一個表格: https : //banner.uregina.ca/prod/sct/bwckschd.p_disp_dyn_sched

僅在完成第一個表格后,才能直接將第二個表格鏈接到。

根據圖片,您的Web瀏覽器正在使用application/x-www-form-urlencoded編碼,但是您使用curl的方式是curl進行了multipart/form-data編碼。 一些網站對此很敏感。 要使curl使用application/x-www-form-urlencoded編碼,請使用像這樣的http_build_query

    curl_setopt ( $curl_connection, CURLOPT_POSTFIELDS, http_build_query($data_fields) );

編輯:發現您正在執行的另一個錯誤

        'sel_subj' => 'ACAD',
        'sel_subj' => 'dummy',

您僅用“虛擬”覆蓋sel_subj,這會給您帶來錯誤。 正確的方法是

        'sel_subj' => array('ACAD','dummy'),

這就是為什么您收到主題錯誤的原因,“虛擬”不是有效的主題:p

..在PHP上感到羞恥,因為這里沒有拋出錯誤/警告

對我有用的是更改我發送參數的方式。(更改為像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);

根據本網站的說明:

https://yeehuichan.wordpress.com/2011/08/07/sending-multiple-values-with-the-same-namekey-in-curl-post/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM