PHP Curl无法发布数据
我正在用PHP编写一个aubook约会脚本。有一个日历,上面有可预订的日期 我成功地做了日志记录,我成功地获得了随机日期,我成功地获得了可用日期参数,最后我无法发布数据并预订约会 在我成功地使用这个简单的脚本预订之后,我必须设置一个条件-如果有可用的日期,请尝试预订,否则将继续刷新PHP Curl无法发布数据,php,curl,post,Php,Curl,Post,我正在用PHP编写一个aubook约会脚本。有一个日历,上面有可预订的日期 我成功地做了日志记录,我成功地获得了随机日期,我成功地获得了可用日期参数,最后我无法发布数据并预订约会 在我成功地使用这个简单的脚本预订之后,我必须设置一个条件-如果有可用的日期,请尝试预订,否则将继续刷新 <?php set_time_limit(0);// to infinity for $ch = curl_init(); $headers[]
<?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);
?>
loadHTML($co);
#解析HTML
#方法调用之前的@before将取消显示以下内容的任何警告:
#由于页面中的HTML无效,loadHTML可能会引发错误。
$xpath=新的DOMXPath($doc);
$val1=$xpath->query('//input[@name=“\u-sid”]/@value')->item(0)->nodeValue;
echo$val1;
回声“
”;
$field['process']='login';
$field[''u sid']=$val1;
$field['email']='myemail@example.com';
$field['pwd']='123456';
$datafield=http\u build\u 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\u exec($ch);
$do=新的DOMDocument();//新dom文档从可用日期日历获取URL
libxml\u使用\u内部错误(true);
$do->loadHTML($cur);
#解析HTML
#方法调用之前的@before将取消显示以下内容的任何警告:
#由于页面中的HTML无效,loadHTML可能会引发错误。
$xpath=newdomxpath($do);
$onClickAttrNodeList=$xpath->query('//a[@class=“dispo”]/@onclick')//数组包含URL
$array=array();//将节点列表对象转换为数组
foreach($onClickAttrNodeList作为$node){
$array[]=$node;
}
$x=数组();
foreach($array作为$node){
对于($i=0;$i<10;++$i){
$x[]=$node->nodeValue;//将所有链接解析为表
}
}
$randlink=array_rand($x,10)//从可用日期日历中获取gandom链接
$link=$x[$randlink[0]];
回声“
”;
preg#u match#u all('#\bhtps?://[^,\s()]+(?:\([\w\d]+\)|([^,[:punct:][\s]./)#',$link,$match)//从最后一个数组中获取URL
回声“;
$url=$match[0];
打印($url[0]);
回声“
”;
parse_str(parse_url($url[0],PHP_url_查询),$arrayurl);//从要预订的可用日期的URL获取参数
var_dump($arrayurl);
/*在这部分代码中
我正在试着发帖
要预订的参数
我在这一步上失败了*/
$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\u build\u 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\u exec($ch);
回声“
”;
echo$book;
卷曲关闭($ch);
?>
谢谢。问题解决了,我刚刚添加了用户代理和一些标题
谢谢大家:-)。I“我不确定您的问题是什么,问题在哪里,以及您预期会发生什么。您不应该关闭证书验证。有可用的免费证书,没有人必须关闭安全。Adam请阅读代码不要随机投票/*在代码的这一部分中,我试图发布参数以预订约会我在这一步失败*/