libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
<?php
$login_url = $discuz_url . 'login.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( '/<input\s*type="hidden"\s*name="formhash"\s*value="(.*?)"\s*\/>/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( '/<input\s*type="hidden"\s*name="formhash"\s*id="formhash"\s*value="(.*?)"\s*\/>/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 );
?>
|
以上所述就是本文的全部内容了,希望大家能够喜欢。