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 ); ?> |
以上所述就是本文的全部内容了,希望大家能够喜欢。