Home  >  Article  >  Backend Development  >  discuz forum template implementation code for logging into discuz forum through curl simulation in php

discuz forum template implementation code for logging into discuz forum through curl simulation in php

WBOY
WBOYOriginal
2016-07-29 08:48:00873browse

libcurl also supports HTTPS authentication, HTTP POST, HTTP PUT, FTP upload (this can also be done through PHP's FTP extension), HTTP form-based upload, proxy, cookies and username + password authentication.
PHP’s curl is really easy to use. When searching for relevant articles on the Internet, they are all about curl simulated login. Very few people provide source code for simulated discuz posting.

Copy the code The code is as follows:


$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 question
$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, get 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);
//Get the key You can use the cookie file to simulate posting, and 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 tags
$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 source page 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 the cookie file
unlink($cookie_file);
?>

The above introduces the implementation code of discuz forum template in PHP to simulate logging in to discuz forum through curl, including the content of discuz forum template. I hope it will be helpful to friends who are interested in PHP tutorials.

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