这是我的问题。几个月前,我写了一个PHP脚本,以便在网站上连接到我的帐户。我使用CURL来连接,一切都很好。然后,他们更新了网站,现在我无法再连接。问题不在于CURL,因为我没有从CURL得到任何错误,但是网站本身告诉我我不能。
这是我的剧本:
<?php
require('simple_html_dom.php');
//Getting the website main page
$url = "http://www.kijiji.ca/h-ville-de-quebec/1700124";
$main = file_get_html($url);
$links = $main -> find('a');
//Finding the login page
foreach($links as $link){
if($link -> innertext == "Ouvrir une session"){
$page = $link;
}
}
$to_go = "http://www.kijiji.ca/".$page->href;
//Getting the login page
$main = file_get_html($to_go);
$form = $main -> find("form");
//Parsing the page for the login form
foreach($form as $f){
if($f -> id == "login-form"){
$cform = $f;
}
}
$form = str_get_html($cform);
//Getting my post data ready
$postdata = "";
$tot = count($form->find("input"));
$count = 0;
/*I've got here a foreach loop to find all the inputs in the form. As there are hidden input for security, I make my script look for all the input and get the value of each, and then add them in my post data. When the name of the input is emailOrNickname or password, I enter my own info there, then it gets added to the post data*/
foreach($form -> find("input") as $input){
$count++;
$postdata .= $input -> name;
$postdata .= "=";
if($input->name == "emailOrNickname"){
$postdata.= "my email address ";
}else if($input->name == "password"){
$postdata.= "my password";
}else{
$postdata .= $input -> value;
}
if($count<$tot){
$postdata .= "&";
}
}
//Getting my curl session
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => $to_go,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $postdata,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_COOKIESESSION => true,
CURLOPT_COOKIEJAR => 'cookie.txt'
));
$result = curl_exec ($ch);
curl_close ($ch);
echo $result;
?>
CURL也没有PHP返回任何错误。事实上,它返回网站的网页,但是这个网页告诉我发生了一个错误,好像丢失了一些帖子数据。
您认为会导致什么?可能是一些缺少curl_setopts?我不知道,你有吗?
答案 0 :(得分:0)
$form = $main -> find("form")
找到第一次出现的元素
,那是<form id="SearchForm" action="/b-search.html">
您需要将其更改为$form = $main->find('#login-form')
答案 1 :(得分:0)
最有可能的问题是网站(服务器)检查cookie。这个过程主要包括两个阶段:
1)当您在某个页面上第一次访问该网站时,例如在登录页面上,服务器使用一些数据设置cookie。
2)在每个后续页面访问或POST请求中,服务器检查它已设置的cookie。
因此,您必须在脚本中重现此过程,这意味着您必须使用CURL从网站获取任何页面,包括应由CURL获取的登录页面,而不是file_get_html
。
此外,您必须将CURLOPT_COOKIEJAR
和CURLOPT_COOKIEFILE
选项设置为每个绝对路径值('cookies.txt'是相对路径) 请求。这是必要的,以便在脚本将执行的整个请求(包括重定向)系列中启用cookie自动处理(会话维护)。