ホームページ >バックエンド開発 >PHPチュートリアル >p長い間連絡を取っていなかった友達をQQスペースで見かけましたか?

p長い間連絡を取っていなかった友達をQQスペースで見かけましたか?

WBOY
WBOYオリジナル
2016-07-25 08:51:101329ブラウズ
午後、友達がずっと連絡してる人気のスペースを見ました!私に連絡して!自分のスペースで見た人は誰でも、QQ とニックネームが写真に表示されます。これはどのように行われるのでしょうか?ここに小さなデモを書きました。 QQ ニックネームを取得するには、Web ページにアクセスする必要があります。ここにオリジナルのクラスがあります。直接使用してください。入手方法はたくさんあります。ただし、コードに直接進みましょう。
  1. $ment = $_SERVER["HTTP_REFERER"];
  2. preg_match("#[0-9]{5,11}#",$ment,$rr);
  3. $r=$ rr[0];
  4. include_once("Curl.class.php");
  5. $curl=new Curl();
  6. $webtext=$curl->get('http://redstones.sinaapp.com/apis/ qqinfo-service.php?qq='.$r);
  7. preg_match('#"ニックネーム":"(.*?)"#',$webtext,$rr);
  8. $rrr=$rr[ 1];
  9. header("Content-type:image/png");
  10. $im=imagecreatefromjpeg("1.jpg");
  11. $black = ImageColorAllocate($im, 56,73,136);
  12. $fnt="深芬正.TTF";
  13. imagettftext($im,26,0,110,100,$black,"深芬正.TTF",$rrr);
  14. imagettftext($im,26,0,100,180,$black,"深芬正.TTF",$r) ;
  15. imagejpeg($im);
  16. imagedestroy($im);
  17. ?>
コードをコピー
  1. class Curl{
  2. //CURL ハンドル
  3. private $ch = null;
  4. //CURL の実行前後にサーバーによって設定または返された情報
  5. private $info = array();
  6. //CURL SETOPT 情報
  7. private $setopt = array(
  8. //アクセスされるポート、http のデフォルトは 80 です
  9. 'port'=>80,
  10. //クライアント USERAGENT、例: "Mozilla/4.0" (該当する場合) empty ユーザーのブラウザを使用します
  11. 'userAgent'=>'',
  12. //接続タイムアウト期間
  13. 'timeOut'=>30,
  14. // COOKIE を使用するかどうかは、ほとんどの Web サイトで使用されるため、オンにすることをお勧めします
  15. 'useCookie'= >true,
  16. //SSLをサポートするかどうか
  17. 'ssl'=>false,
  18. //クライアントがgzip圧縮をサポートするかどうか
  19. 'gzip'=>true,
  20. //使用するかどうかa proxy
  21. 'proxy'=> ;false,
  22. //プロキシ タイプ、HTTP または SOCKS5 を選択できます
  23. 'proxyType'=>'HTTP',
  24. //プロキシのホスト アドレス(HTTP モードの場合) "http://www .proxy.com" のような URL 形式で記述する必要があります: "http://www .proxy.com"
  25. //SOCKS5 メソッドは、"192.168.1.1"
  26. のような IP 形式でホスト ドメイン名を直接書き込みます。 proxyHost'=>'http://www.proxy.com',
  27. //プロキシ ホストのポート
  28. 'proxyPort'=>1234,
  29. //プロキシが ID 認証を必要とするかどうか (HTTP モードの場合)
  30. 'proxyAuth'=>false,
  31. //認証方式は BASIC または NTLM 方式を選択できます
  32. 'proxyAuthType '=>'BASIC',
  33. //認証されたユーザー名とパスワード
  34. 'proxyAuthUser'=>'user',
  35. 'proxyAuthPwd'=>'password',
  36. );
  37. /**
  38. * コンストラクター
  39. *
  40. * @param array $setopt: 設定するには private $setopt を参照してください
  41. * /
  42. public function __construct($setopt=array())
  43. {
  44. //ユーザー設定とシステムのデフォルト設定をマージします
  45. $ this->setopt = array_merge($this->setopt,$setopt);
  46. / / CURL がインストールされていない場合は、プログラムを終了します
  47. function_exists('curl_init') die('CURL Library Not Loaded');
  48. //初期化
  49. $this->ch =curl_init();
  50. //CURL 接続ポートを設定します
  51. curl_setopt($this->ch, CURLOPT_PORT, $this->setopt['port']);
  52. //プロキシを使用します
  53. if($this->setopt['proxy']){
  54. $proxyType = $this->setopt['proxyType']=='HTTP' ? CURLPROXY_HTTP : CURLPROXY_SOCKS5;
  55. curl_setopt($this ->ch, CURLOPT_PROXYTYPE, $proxyType);
  56. curl_setopt($this->ch, CURLOPT_PROXY, $this->setopt['proxyHost']);
  57. curl_setopt($this->ch, CURLOPT_PROXYPORT, $this ->setopt['proxyPort']);
  58. //プロキシは認証される必要があります
  59. if($this- >setopt['proxyAuth']){
  60. $proxyAuthType = $this->setopt['proxyAuthType' ]=='BASIC' ? CURLAUTH_BASIC : CURLAUTH_NTLM;
  61. curl_setopt($this->ch, CURLOPT_PROXYAUTH, $proxyAuthType) ;
  62. $user = "[{$this->setopt['proxyAuthUser']}]:[{ $this->setopt['proxyAuthPwd']}]";
  63. curl_setopt($this->ch, CURLOPT_PROXYUSERPWD , $user);
  64. }
  65. }
  66. if (ini_get('open_basedir') == '' && ini_get ('safe_mode' == 'Off'))
  67. //有効にすると、サーバーから返された「Location:」が返されます ヘッダーに入れて再帰的にサーバーに返します
  68. curl_setopt($this->ch , CURLOPT_FOLLOWLOCATION, true);
  69. // SSL のサポートをオープンします
  70. if($this->setopt['ssl']){
  71. // 認証証明書のソースをチェックしません
  72. curl_setopt($this->ch , CURLOPT_SSL_VERIFYPEER, false);
  73. //証明書から SSL 暗号化アルゴリズムが存在するかどうかを確認します
  74. curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, true);
  75. }
  76. //lighttpd サーバーへのアクセスをサポートするように http ヘッダーを設定します
  77. $ header[]= 'Expect:';
  78. curl_setopt($this->ch, CURLOPT_HTTPHEADER, $header);
  79. //HTTP USERAGENT を設定します
  80. $userAgent = $this->setopt['userAgent'] $this- >setopt['userAgent'] : $_SERVER['HTTP_USER_AGENT'];
  81. curl_setopt($this->ch, CURLOPT_USERAGENT, $userAgent);
  82. // 接続待機時間を設定します。0 は待機しません
  83. curl_setopt($ this->ch, CURLOPT_CONNECTTIMEOUT, $this->setopt['timeOut']);
  84. //curl が実行できる最大秒数を設定します
  85. curl_setopt($this ->ch, CURLOPT_TIMEOUT, $this- >setopt['timeOut']);
  86. //クライアントが gzip 圧縮をサポートするかどうかを設定します
  87. if($this->setopt['gzip']){
  88. curl_setopt($ this->ch, CURLOPT_ENCODING, 'gzip ');
  89. }
  90. //COOKIEが使用されているかどうか
  91. if($this->setopt['useCookie']){
  92. //一時的なCOOKIEを保存するファイルを生成します(絶対パスである必要があります)
  93. $cookfile = tempnam( sys_get_temp_dir(),'cuk');
  94. //接続が閉じられた後、Cookie 情報を保存します
  95. curl_setopt($this->ch, CURLOPT_COOKIEJAR, $cookfile);
  96. curl_setopt($this-> ;ch, CURLOPT_COOKIEFILE, $ Cookfile);
  97. }
  98. //ヘッダファイルの情報をデータストリームとして出力するかどうか(HEADER情報)、ここにメッセージを保持
  99. curl_setopt($this->ch, CURLOPT_HEADER, true);
  100. //取得した情報は直接出力されるのではなく、ファイル ストリームの形式で返されます。
  101. curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true) ;
  102. curl_setopt($this->ch, CURLOPT_BINARYTRANSFER, true) ;
  103. }
  104. /**
  105. * GET モードでリクエストを実行します
  106. *
  107. * @param string $url: リクエストの URL
  108. * @param array $params: リクエストのパラメータ、形式は次のとおりです: array('id'=> 10,'name'=> ;'yuanwei')
  109. * @param array $referer: 参照ページ、空の場合に自動的に設定されます。サーバーがこれを制御できる場合は、設定する必要があります。
  110. * @return エラー return: false 正解戻り値: 結果の内容
  111. */
  112. public function get($url, $params=array(), $referer='')
  113. {
  114. return $this->_request('GET', $url, $params, array(), $referer);
  115. }
  116. /**
  117. * POST モードでリクエストを実行します
  118. *
  119. * @param string $url: リクエストされた URL
  120. * @param array $params: リクエストされたパラメータ、形式は次のとおりです: array('id'=>10,'name' => ;'yuanwei')
  121. * @param array $uploadFile: アップロードされたファイルは相対パスをサポートしており、形式は次のとおりです
  122. * 単一ファイルのアップロード: array('img1'=>'./file/a.jpg' )
  123. * フィールド複数ファイルアップロードと同じ: array('img'=>array('./file/a.jpg','./file/b.jpg'))
  124. * @param array $referer:referenceページ、参照ページ、空の場合は自動的に設定されます。サーバーがこれを制御できる場合は、設定する必要があります。
  125. * @return エラー戻り値: false 正しい戻り値: 結果の内容
  126. */
  127. public function post($url,$params=array(),$uploadFile=array(), $referer='')
  128. {
  129. return $this->_request('POST', $url, $params, $uploadFile, $referer);
  130. }
  131. /**
  132. * エラーメッセージを取得します
  133. *
  134. * @return string
  135. */
  136. public function error()
  137. {
  138. returncurl_error($this->ch);
  139. }
  140. /**
  141. * エラーコードを取得します
  142. *
  143. * @return int
  144. */
  145. public function errno()
  146. {
  147. returncurl_errno($this->ch);
  148. }
  149. /**
  150. * リクエストの送信前後にすべてのサーバー情報とサーバーヘッダー情報を取得します。
  151. * [前]: リクエスト前に設定された情報
  152. * [後]: リクエスト後のすべてのサーバー情報
  153. * [ヘッダー]:サーバーヘッダメッセージ情報
  154. *
  155. * @return array
  156. */
  157. public function getInfo()
  158. {
  159. return $this-> ;info;
  160. }
  161. /**
  162. * デストラクター
  163. *
  164. */
  165. public function __destruct()
  166. {
  167. //关闭CURL
  168. curl_close($this->ch);
  169. }
  170. /**
  171. * プライベートメソッド: 最終リクエストを実行します
  172. *
  173. * @param string $method: HTTP リクエストメソッド
  174. * @param string $url: リクエストされた URL
  175. * @param array $params: リクエストされたパラメータ
  176. * @param array $uploadFile :アップロードファイル(POST時のみ有効)
  177. * @param array $referer: 参考ページ
  178. * @return エラー戻り値: false 正しい戻り値: 結果内容
  179. * /
  180. private function _request($method, $url, $params=array(), $uploadFile=array(), $referer='')
  181. {
  182. //結果が GET 方式で请求する場合は URL の次の面に接続する必要があります
  183. if($method == 'GET'){
  184. $url = $this->_parseUrl($url,$params);
  185. }
  186. //設置要求のURL
  187. curl_setopt($this->ch, CURLOPT_URL, $url);
  188. //如果是POST
  189. if($method == 'POST'){
  190. //定期的に送信されるPOST要求、種類:application/x-www-form-urlencoded
  191. curl_setopt($this- >ch, CURLOPT_POST, true) ;
  192. //設置POSTフィールド值
  193. $postData = $this->_parsmEncode($params,false);
  194. /*
  195. //如果有上传文件
  196. if($uploadFile){
  197. foreach($uploadFile as $key=>$file){
  198. if(is_array($file)){
  199. $n = 0;
  200. foreach($file as $f){
  201. //文件必須绝对路径
  202. $postData[$key.'['.$n++.']'] = '@'.realpath($f);
  203. }
  204. }else{
  205. $postData[$key] = '@'.realpath($file );
  206. }
  207. }
  208. }
  209. */
  210. //pr($postData); die;
  211. curl_setopt($this->ch, CURLOPT_POSTFIELDS, $postData);
  212. }
  213. //设置了参照页,否自動设置
  214. if($referer){
  215. curl_setopt($this->ch, CURLOPT_REFERER, $referer);
  216. }else{
  217. curl_setopt($this->ch, CURLOPT_AUTOREFERER, true);
  218. }
  219. //すべての設置情報を取得
  220. $this->info['before'] =curl_getinfo($this ->ch);
  221. //開始行请要求
  222. $result =curl_exec($this->ch);
  223. //报文头
  224. を獲得 $headerSize =curl_getinfo($this->ch, CURLINFO_HEADER_SIZE);
  225. $this->info['header'] = substr($result, 0, $headerSize);
  226. //去掉报文头
  227. $result = substr($result, $headerSize);
  228. //含まれるサービスをすべて取得返された情報
  229. $this->info['after'] =curl_getinfo($this->ch);
  230. //如果请要求成功
  231. if($this->errno() == 0){ // && $this->info['after']['http_code'] == 200
  232. return $result;
  233. }else{
  234. return false;
  235. }
  236. }
  237. /**
  238. * GET モードで使用される、解析された URL を返します
  239. *
  240. * @param string $url:URL
  241. * @param array $params: URL の後に追加されるパラメーター
  242. * @return string
  243. */
  244. private function _parseUrl($url,$params)
  245. {
  246. $fieldStr = $this->_parsmEncode($params);
  247. if($fieldStr){
  248. $url .= strstr($url,'?')===間違い ? 「?」 : '&';
  249. $url .= $fieldStr;
  250. }
  251. return $url;
  252. }
  253. /**
  254. * ENCODE パラメータをエンコードします
  255. *
  256. * @param array $params: パラメータ
  257. * @param bool $isRetStr: true: 文字列として返します false: 配列として返します
  258. * @return string array
  259. */
  260. プライベート関数 _parsmEncode($params,$isRetStr=true)
  261. {
  262. $fieldStr = '';
  263. $spr = '';
  264. $result = array();
  265. foreach( $params as $key=>$value){
  266. $value = urlencode($value);
  267. $fieldStr .= $spr.$key .'='。 $value;
  268. $spr = '&';
  269. $result[$key] = $value;
  270. }
  271. return $isRetStr ? $fieldStr : $result;
  272. }
  273. }
复制代
p長い間連絡を取っていなかった友達をQQスペースで見かけましたか?


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。