使用PHP登录网站并从页面获取文本
我正在尝试登录到一个网站,并从一个页面抓取内容,你必须验证才能看到。我做了一些研究,并看到了一些使用cURL和stream_context_create的示例,但我无法找到任何一种方法。我有要登录的页面的url,以及包含我需要获取的数据的页面。非常感谢你的帮助 以下是我的工作内容:使用PHP登录网站并从页面获取文本,php,curl,login,autologin,Php,Curl,Login,Autologin,我正在尝试登录到一个网站,并从一个页面抓取内容,你必须验证才能看到。我做了一些研究,并看到了一些使用cURL和stream_context_create的示例,但我无法找到任何一种方法。我有要登录的页面的url,以及包含我需要获取的数据的页面。非常感谢你的帮助 以下是我的工作内容: <?php $pages = array('home' => 'https://www.53.com/wps/portal/personal', 'login'
<?php
$pages = array('home' =>
'https://www.53.com/wps/portal/personal',
'login' =>
'https://www.53.com/wps/portal/personal',
'data' =>
'https://www.53.com/servlet/efsonline/index.html?Messages.SortedBy=DATE,REVERSE');
$ch = curl_init();
//Set options for curl session
$options = array(CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)',
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_HEADER => TRUE,
//CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_COOKIEFILE => 'cookie.txt',
CURLOPT_COOKIEJAR => 'cookies.txt');
//Hit home page for session cookie
$options[CURLOPT_URL] = $pages['home'];
curl_setopt_array($ch, $options);
curl_exec($ch);
//Login
$options[CURLOPT_URL] = $pages['login'];
$options[CURLOPT_POST] = TRUE;
$options[CURLOPT_POSTFIELDS] = 'uid-input=xxx&pw=xxx';
$options[CURLOPT_FOLLOWLOCATION] = FALSE;
curl_setopt_array($ch, $options);
curl_exec($ch);
//Hit data page
$options[CURLOPT_URL] = $pages['data'];
curl_setopt_array($ch, $options);
$data = curl_exec($ch);
//Output data
echo $data;
//Close curl session
curl_close($ch);
?>
干杯
安东尼如果你看一看,你可能会得到你需要的东西
(我猜你需要做与登录时相同的帖子,然后从那里继续会话)
编辑(作为对以下问题的回答)
在第一个请求中,客户端将在登录后使用一些cookie进行响应。您必须在第二个请求中将此cookie设置为标头
如果您收到500个错误,则可能是服务器拒绝了您的请求,因为您没有向其发送足够的头。拒绝你并不少见。请尝试以下操作:
$opts = array('http' =>
array('method' => 'Get',
'Header' => "Host: www.someserver.com\r\n".
"User-Agent: Mozilla\r\n",
'user_agent' => 'Mozilla'));
$context = stream_context_create($opts);
$fp = fopen('http://www.someserver.no', 'r', false, $context);
fpassthru($fp);
fclose($fp);
。。。您可能需要设置的标题因服务器而异。Anthony,不久前我不得不构建类似的东西。你需要关注的是饼干
Curl处理cookies,您需要做的是确保首先登录,并在同一连接中加载数据。如果您不能使用相同的连接,您可以使用opts CURLOPT_COOKIE或CURLOPT_COOKIE文件来帮助您。更多信息:您使用的是登录字段ID而不是名称:
$options[CURLOPT_POSTFIELDS] = 'uid-input=xxx&pw=xxx';
应该是
$options[CURLOPT_POSTFIELDS] = 'UserName=xxx&Password=xxx';
显示你无法使用的代码,肯定有人能帮助你超越请检查[link][1]和帮助我[1]:没错,但我认为我的问题是我需要在单独的页面上进行身份验证,然后将会话转到包含我想要的内容的第二页。我尝试了这个例子,两次调用file_get_contents,一次用于身份验证,一次用于从第二页获取内容。但我得到的只是“…[function.file get contents]:无法打开流:HTTP请求失败!HTTP/1.1 500内部服务器错误…”500内部服务器错误是来自您的服务器还是您将查询发送到的服务器=如果您要使用“file\u get\u contents”,那么您需要自己提取cookie头并对其进行解析,我不建议这样做。我试过了,在网上找到了一些例子,查看原始帖子以获取更新的代码,但它正在输出登录页面,并从网站上发出消息说cookies未启用。