我正在尝试登录到一个网站,并从一个页面抓取内容,您必须通过身份验证才能看到。我做了一些研究,并看到了一些使用cURL和stream_context_create的示例,但我无法获得任何一种方式的工作。我有该页面的URL登录,并包含我需要获得的数据的页面。您的帮助是非常感谢!
下面是我的工作:
<?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);
?>
干杯,
安东尼
3条答案
按热度按时间weylhg0b1#
安东尼,前一段时间我不得不建立这样的东西。你需要关注的是,在饼干。
Curl处理cookies,你需要做的是确保你先登录,并在同一个连接中加载数据。如果你不能使用同一个连接,你可以使用opts CURLOPT_COOKIE或CURLOPT_COOKIEFILE来帮助你。更多信息:http://ar2.php.net/manual/en/function.curl-setopt.php
a8jjtwal2#
如果你看一下How to post data in PHP using file_get_contents?,你可能会得到你所需要的。
(我猜你需要做的是登录时的帖子,并从那里继续会话)
编辑(作为对以下问题的回答)
在第一个请求中,客户端在登录后会用一些cookie来响应。这个cookie必须在第二个请求中设置为头。
如果您收到500个错误,可能是因为您没有传送足够的信头给服务器,所以服务器拒绝您的要求。拒绝您的情况并不少见。请尝试下列方法:
...您可能需要设置的标头因服务器而异。
hgc7kmma3#
您使用的是登录字段ID而不是名称:
应该是