Home  >  Article  >  Backend Development  >  Php CURL simulates logging into the forum and collects data example_PHP tutorial

Php CURL simulates logging into the forum and collects data example_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:48:39916browse

This article will introduce to you students about Php CURL simulated login forum and data collection examples. If you are interested in using curl simulated login function, you can enter for reference.

To simulate a browser accessing a website, the first step is to learn to observe how the browser sends http messages and what kind of content the website server returns to the browser. I recommend installing httpwatch software developed by foreigners. It is best to get a cracked version, otherwise some functions will not be available. After this software is installed, it is embedded in IE. Start Record, enter the URL in the address bar and press Enter. It will scan out all the communications between the browser and the server, giving you a clear view. The use of this software will not be introduced in this article.

The most critical aspect of simulating browser login application development is to break through login verification. CURL technology not only supports http, but also https. The difference is that there is an additional layer of SSL encrypted transmission. If you want to log in to an https website, PHP must support openssl. Let’s take an example to analyze first.

The code is as follows Copy code
 代码如下 复制代码

$discuz_url = 'http://127.0.0.1/discuz/'; //论坛地址
$login_url = $discuz_url . 'logging.php?action=login'; //登录页地址

$post_fields = array();
//以下两项不需要修改
$post_fields['loginfield'] = 'username';
$post_fields['loginsubmit'] = 'true';
//用户名和密码,必须填写
$post_fields['username'] = 'tianxin';
$post_fields['password'] = '111111';
//安全提问
$post_fields['questionid'] = 0;
$post_fields['answer'] = '';
//@todo验证码
$post_fields['seccodeverify'] = '';

//获取表单FORMHASH
$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);
preg_match('//i', $contents, $matches);
if (!empty($matches)) {
    $formhash = $matches[1];
} else {
    die('Not found the forumhash.');
}

//POST数据,获取COOKIE,cookie文件放在网站的temp目录下
$cookie_file = tempnam('./temp', 'cookie');

$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_exec($ch);
curl_close($ch);

//取到了关键的cookie文件就可以带着cookie文件去模拟发帖,fid为论坛的栏目ID
$send_url = $discuz_url . "post.php?action=newthread&fid=2";


$ch = curl_init($send_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$contents = curl_exec($ch);
curl_close($ch);

//这里的hash码和登陆窗口的hash码的正则不太一样,这里的hidden多了一个id属性
preg_match('//i', $contents, $matches);
if (!empty($matches)) {
    $formhash = $matches[1];
} else {
    die('Not found the forumhash.');
}


$post_data = array();
//帖子标题
$post_data['subject'] = 'test2';
//帖子内容
$post_data['message'] = 'test2';
$post_data['topicsubmit'] = "yes";
$post_data['extra'] = '';
//帖子标签
$post_data['tags'] = 'test';
//帖子的hash码,这个非常关键!假如缺少这个hash码,discuz会警告你来路的页面不正确
$post_data['formhash'] = $formhash;


$ch = curl_init($send_url);
curl_setopt($ch, CURLOPT_REFERER, $send_url);       //伪装REFERER
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$contents = curl_exec($ch);
curl_close($ch);

//清理cookie文件
unlink($cookie_file);
?>

$discuz_url = 'http://127.0.0.1/discuz/'; //Forum address
$login_url = $discuz_url . 'logging.php?action=login'; //Login page address<🎜> <🎜>$post_fields = array();
//The following two items do not need to be modified
$post_fields['loginfield'] = 'username';
$post_fields['loginsubmit'] = 'true';
//Username and password must be filled in
$post_fields['username'] = 'tianxin';
$post_fields['password'] = '111111';
//Security questions
$post_fields['questionid'] = 0;
$post_fields['answer'] = '';
//@todo verification code
$post_fields['seccoverify'] = '';<🎜> <🎜>//Get form FORMHASH
$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec($ch);
curl_close($ch);
preg_match('//i', $contents, $matches);
if (!empty($matches)) {
$formhash = $matches[1];
} else {
Die('Not found the forumhash.');
} //POST data, obtain COOKIE, and put the cookie file in the temp directory of the website
$cookie_file = tempnam('./temp', 'cookie'); $ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_exec($ch);
curl_close($ch); //After getting the key cookie file, you can use the cookie file to simulate posting. Fid is the column ID of the forum
$send_url = $discuz_url . "post.php?action=newthread&fid=2";
$ch = curl_init($send_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$contents = curl_exec($ch);
curl_close($ch); //The hash code here is different from the hash code in the login window. The hidden here has an additional id attribute
preg_match('//i', $contents, $matches);
if (!empty($matches)) {
$formhash = $matches[1];
} else {
Die('Not found the forumhash.');
}
$post_data = array();
//Post title
$post_data['subject'] = 'test2';
//Post content
$post_data['message'] = 'test2';
$post_data['topicsubmit'] = "yes";
$post_data['extra'] = '';
//Post tag
$post_data['tags'] = 'test';
//The hash code of the post, this is very critical! If this hash code is missing, discuz will warn you that the page you came from is incorrect
$post_data['formhash'] = $formhash;
$ch = curl_init($send_url);
curl_setopt($ch, CURLOPT_REFERER, $send_url); //Disguise REFERER
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$contents = curl_exec($ch);
curl_close($ch); //Clean cookie files
unlink($cookie_file);
?>

CURL实现网站模拟登陆

 代码如下
 代码如下 复制代码

复制代码

http://www.bkjia.com/PHPjc/632770.htmlwww.bkjia.comtrue
http://www.bkjia.com/PHPjc/632770.html
TechArticle
本文章来给各位同学介绍一下关于Php CURL模拟登陆论坛并采集数据实例,如果你对利用curl模拟登录功能有兴趣可进入参考。 要模拟浏览器访...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn