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