Home  >  Article  >  Backend Development  >  Implementation code for simulating login to discuz forum through curl in PHP_PHP Tutorial

Implementation code for simulating login to discuz forum through curl in PHP_PHP Tutorial

WBOY
WBOYOriginal
2016-07-21 15:21:07983browse

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 related articles on the Internet, all the relevant articles are about curl simulated login. Very few people provide the source code for simulated discuz posting.

Copy 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, 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);
//Get the key cookie The file can be used to simulate posting with the cookie file, 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 cookie file
unlink($cookie_file);
?>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/324966.htmlTechArticlelibcurl also supports HTTPS authentication, HTTP POST, HTTP PUT, FTP upload (this can also be used through PHP's FTP extension Complete), HTTP form-based upload, proxy, cookies and username + password recognition...
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