PHP Curl无法发布数据

时间:2018-10-22 12:30:58

标签: php curl post

我正在使用PHP编写aubook约会脚本。有一个日历,其中有可预订的日期。

我成功进行了日志记录,成功获取了随机日期,成功获取了可用的日期参数,然后最终我无法发布数据并预定约会。

在使用此简单脚本成功预订后,我必须做一个条件-如果有可用的日期,请尝试预订,否则继续刷新

    <?php

        set_time_limit(0);// to infinity for 


        $ch = curl_init();
        $headers[] = "Accept: */*";
        $headers[] = "Connection: Keep-Alive";


        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_URL, 'https://example.com/login/login.php');
        curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
        curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);


        $co = curl_exec($ch);


    $doc = new DOMDocument();
    libxml_use_internal_errors(true);
    $doc->loadHTML($co);
    # Parse the HTML
    # The @ before the method call suppresses any warnings that
    # loadHTML might throw because of invalid HTML in the page.
    $xpath = new DOMXPath($doc);

    $val1 = $xpath->query('//input[@name="_sid"]/@value')->item(0)->nodeValue;


    echo $val1; 



     echo '<br/>';

         $field['process'] = 'login';
        $field['_sid'] = $val1;
        $field['email'] = 'myemail@example.com';
        $field['pwd'] = '123456';

        $datafield = http_build_query($field);

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
        curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $datafield);
        curl_setopt($ch, CURLOPT_VERBOSE, true);

        curl_exec($ch);

        curl_setopt($ch, CURLOPT_URL, 'https://example.com/login/myapp.php?fg_id=5568094');

        $cur = curl_exec($ch);



        $do = new DOMDocument();   // New  dom Doc to Get URL from calender of avaliable dates
    libxml_use_internal_errors(true);
    $do->loadHTML($cur);
    # Parse the HTML
    # The @ before the method call suppresses any warnings that
    # loadHTML might throw because of invalid HTML in the page.
    $xpath = new DOMXPath($do);
    $onClickAttrNodeList = $xpath->query('//a[@class="dispo"]/@onclick'); //array contains URL 

    $array = array();         // CONVERT NODE LIST  OBJECT TO ARRAY
    foreach($onClickAttrNodeList as $node){
        $array[] = $node;
    }


    $x=array();
       foreach($array as $node) {
           for($i = 0; $i < 10; ++$i) {
         $x[] = $node->nodeValue;  //PARSE ALL LINK AS TABLE
    }

    }
    $randlink = array_rand($x, 10);   //get gandom link from calender of avaliable dates 
    $link = $x[$randlink[0]];



    echo '<br/>';
    preg_match_all('#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $link, $match);  //Get URL from the last array
       echo "<pre>";
       $url = $match[0];
    print_r($url[0]); 

    echo'<br/>';

    parse_str( parse_url( $url[0], PHP_URL_QUERY), $arrayurl );   // GET parametres from the URL of avaliable dates to book

    var_dump($arrayurl);

 /* in this part of code
    i am trying  to post 
    parametres to book
    an appottment i failed on this step */
        $fieldbook['timestamp'] = $arrayurl[0];                      
        $fieldbook['skey'] = $arrayurl[1];
        $fieldbook['process'] = $arrayurl[2];
        $fieldbook['what'] = $arrayurl[3];
        $fieldbook['fg_id'] = $arrayurl[4];
        $fieldbook['result'] = $arrayurl[5];
        $fieldbook['issuer_view'] = $arrayurl[6];


        $datafieldbook = http_build_query($fieldbook);

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_URL, 'https://example.com/login/action.php');
        curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
        curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $datafieldbook);
        curl_setopt($ch, CURLOPT_VERBOSE, true);

        curl_exec($ch);

        curl_setopt($ch, CURLOPT_URL, 'https://example.com/login/myapp.php?fg_id=5568094');

        $book = curl_exec($ch);



    echo'<br/>';
        echo $book;
            curl_close($ch);


    ?>

谢谢。

1 个答案:

答案 0 :(得分:0)

问题解决了,我只添加了用户代理和一些标题。

谢谢你们:-)。