午後、友達がずっと連絡してる人気のスペースを見ました!私に連絡して!自分のスペースで見た人は誰でも、QQ とニックネームが写真に表示されます。これはどのように行われるのでしょうか?ここに小さなデモを書きました。 QQ ニックネームを取得するには、Web ページにアクセスする必要があります。ここにオリジナルのクラスがあります。直接使用してください。入手方法はたくさんあります。ただし、コードに直接進みましょう。
- $ment = $_SERVER["HTTP_REFERER"];
- preg_match("#[0-9]{5,11}#",$ment,$rr);
- $r=$ rr[0];
- include_once("Curl.class.php");
- $curl=new Curl();
- $webtext=$curl->get('http://redstones.sinaapp.com/apis/ qqinfo-service.php?qq='.$r);
- preg_match('#"ニックネーム":"(.*?)"#',$webtext,$rr);
- $rrr=$rr[ 1];
-
- header("Content-type:image/png");
- $im=imagecreatefromjpeg("1.jpg");
- $black = ImageColorAllocate($im, 56,73,136);
- $fnt="深芬正.TTF";
- imagettftext($im,26,0,110,100,$black,"深芬正.TTF",$rrr);
- imagettftext($im,26,0,100,180,$black,"深芬正.TTF",$r) ;
- imagejpeg($im);
- imagedestroy($im);
- ?>
コードをコピー
- class Curl{
-
- //CURL ハンドル
- private $ch = null;
- //CURL の実行前後にサーバーによって設定または返された情報
- private $info = array();
- //CURL SETOPT 情報
- private $setopt = array(
- //アクセスされるポート、http のデフォルトは 80 です
- 'port'=>80,
- //クライアント USERAGENT、例: "Mozilla/4.0" (該当する場合) empty ユーザーのブラウザを使用します
- 'userAgent'=>'',
- //接続タイムアウト期間
- 'timeOut'=>30,
- // COOKIE を使用するかどうかは、ほとんどの Web サイトで使用されるため、オンにすることをお勧めします
- 'useCookie'= >true,
- //SSLをサポートするかどうか
- 'ssl'=>false,
- //クライアントがgzip圧縮をサポートするかどうか
- 'gzip'=>true,
-
- //使用するかどうかa proxy
- 'proxy'=> ;false,
- //プロキシ タイプ、HTTP または SOCKS5 を選択できます
- 'proxyType'=>'HTTP',
- //プロキシのホスト アドレス(HTTP モードの場合) "http://www .proxy.com" のような URL 形式で記述する必要があります: "http://www .proxy.com"
- //SOCKS5 メソッドは、"192.168.1.1"
- のような IP 形式でホスト ドメイン名を直接書き込みます。 proxyHost'=>'http://www.proxy.com',
- //プロキシ ホストのポート
- 'proxyPort'=>1234,
- //プロキシが ID 認証を必要とするかどうか (HTTP モードの場合)
- 'proxyAuth'=>false,
- //認証方式は BASIC または NTLM 方式を選択できます
- 'proxyAuthType '=>'BASIC',
- //認証されたユーザー名とパスワード
- 'proxyAuthUser'=>'user',
- 'proxyAuthPwd'=>'password',
- );
-
- /**
- * コンストラクター
- *
- * @param array $setopt: 設定するには private $setopt を参照してください
- * /
- public function __construct($setopt=array())
- {
- //ユーザー設定とシステムのデフォルト設定をマージします
- $ this->setopt = array_merge($this->setopt,$setopt);
- / / CURL がインストールされていない場合は、プログラムを終了します
- function_exists('curl_init') die('CURL Library Not Loaded');
- //初期化
- $this->ch =curl_init();
- //CURL 接続ポートを設定します
- curl_setopt($this->ch, CURLOPT_PORT, $this->setopt['port']);
- //プロキシを使用します
- if($this->setopt['proxy']){
- $proxyType = $this->setopt['proxyType']=='HTTP' ? CURLPROXY_HTTP : CURLPROXY_SOCKS5;
- curl_setopt($this ->ch, CURLOPT_PROXYTYPE, $proxyType);
- curl_setopt($this->ch, CURLOPT_PROXY, $this->setopt['proxyHost']);
- curl_setopt($this->ch, CURLOPT_PROXYPORT, $this ->setopt['proxyPort']);
- //プロキシは認証される必要があります
- if($this- >setopt['proxyAuth']){
- $proxyAuthType = $this->setopt['proxyAuthType' ]=='BASIC' ? CURLAUTH_BASIC : CURLAUTH_NTLM;
- curl_setopt($this->ch, CURLOPT_PROXYAUTH, $proxyAuthType) ;
- $user = "[{$this->setopt['proxyAuthUser']}]:[{ $this->setopt['proxyAuthPwd']}]";
- curl_setopt($this->ch, CURLOPT_PROXYUSERPWD , $user);
- }
- }
- if (ini_get('open_basedir') == '' && ini_get ('safe_mode' == 'Off'))
- //有効にすると、サーバーから返された「Location:」が返されます ヘッダーに入れて再帰的にサーバーに返します
- curl_setopt($this->ch , CURLOPT_FOLLOWLOCATION, true);
- // SSL のサポートをオープンします
- if($this->setopt['ssl']){
- // 認証証明書のソースをチェックしません
- curl_setopt($this->ch , CURLOPT_SSL_VERIFYPEER, false);
- //証明書から SSL 暗号化アルゴリズムが存在するかどうかを確認します
- curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, true);
- }
- //lighttpd サーバーへのアクセスをサポートするように http ヘッダーを設定します
- $ header[]= 'Expect:';
- curl_setopt($this->ch, CURLOPT_HTTPHEADER, $header);
- //HTTP USERAGENT を設定します
- $userAgent = $this->setopt['userAgent'] $this- >setopt['userAgent'] : $_SERVER['HTTP_USER_AGENT'];
- curl_setopt($this->ch, CURLOPT_USERAGENT, $userAgent);
- // 接続待機時間を設定します。0 は待機しません
- curl_setopt($ this->ch, CURLOPT_CONNECTTIMEOUT, $this->setopt['timeOut']);
- //curl が実行できる最大秒数を設定します
- curl_setopt($this ->ch, CURLOPT_TIMEOUT, $this- >setopt['timeOut']);
- //クライアントが gzip 圧縮をサポートするかどうかを設定します
- if($this->setopt['gzip']){
- curl_setopt($ this->ch, CURLOPT_ENCODING, 'gzip ');
- }
- //COOKIEが使用されているかどうか
- if($this->setopt['useCookie']){
- //一時的なCOOKIEを保存するファイルを生成します(絶対パスである必要があります)
- $cookfile = tempnam( sys_get_temp_dir(),'cuk');
- //接続が閉じられた後、Cookie 情報を保存します
- curl_setopt($this->ch, CURLOPT_COOKIEJAR, $cookfile);
- curl_setopt($this-> ;ch, CURLOPT_COOKIEFILE, $ Cookfile);
- }
- //ヘッダファイルの情報をデータストリームとして出力するかどうか(HEADER情報)、ここにメッセージを保持
- curl_setopt($this->ch, CURLOPT_HEADER, true);
- //取得した情報は直接出力されるのではなく、ファイル ストリームの形式で返されます。
- curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true) ;
- curl_setopt($this->ch, CURLOPT_BINARYTRANSFER, true) ;
- }
-
- /**
- * GET モードでリクエストを実行します
- *
- * @param string $url: リクエストの URL
- * @param array $params: リクエストのパラメータ、形式は次のとおりです: array('id'=> 10,'name'=> ;'yuanwei')
- * @param array $referer: 参照ページ、空の場合に自動的に設定されます。サーバーがこれを制御できる場合は、設定する必要があります。
- * @return エラー return: false 正解戻り値: 結果の内容
- */
- public function get($url, $params=array(), $referer='')
- {
- return $this->_request('GET', $url, $params, array(), $referer);
- }
-
- /**
- * POST モードでリクエストを実行します
- *
- * @param string $url: リクエストされた URL
- * @param array $params: リクエストされたパラメータ、形式は次のとおりです: array('id'=>10,'name' => ;'yuanwei')
- * @param array $uploadFile: アップロードされたファイルは相対パスをサポートしており、形式は次のとおりです
- * 単一ファイルのアップロード: array('img1'=>'./file/a.jpg' )
- * フィールド複数ファイルアップロードと同じ: array('img'=>array('./file/a.jpg','./file/b.jpg'))
- * @param array $referer:referenceページ、参照ページ、空の場合は自動的に設定されます。サーバーがこれを制御できる場合は、設定する必要があります。
- * @return エラー戻り値: false 正しい戻り値: 結果の内容
- */
- public function post($url,$params=array(),$uploadFile=array(), $referer='')
- {
- return $this->_request('POST', $url, $params, $uploadFile, $referer);
- }
-
- /**
- * エラーメッセージを取得します
- *
- * @return string
- */
- public function error()
- {
- returncurl_error($this->ch);
- }
-
- /**
- * エラーコードを取得します
- *
- * @return int
- */
- public function errno()
- {
- returncurl_errno($this->ch);
- }
-
- /**
- * リクエストの送信前後にすべてのサーバー情報とサーバーヘッダー情報を取得します。
- * [前]: リクエスト前に設定された情報
- * [後]: リクエスト後のすべてのサーバー情報
- * [ヘッダー]:サーバーヘッダメッセージ情報
- *
- * @return array
- */
- public function getInfo()
- {
- return $this-> ;info;
- }
-
- /**
- * デストラクター
- *
- */
- public function __destruct()
- {
- //关闭CURL
- curl_close($this->ch);
- }
-
- /**
- * プライベートメソッド: 最終リクエストを実行します
- *
- * @param string $method: HTTP リクエストメソッド
- * @param string $url: リクエストされた URL
- * @param array $params: リクエストされたパラメータ
- * @param array $uploadFile :アップロードファイル(POST時のみ有効)
- * @param array $referer: 参考ページ
- * @return エラー戻り値: false 正しい戻り値: 結果内容
- * /
- private function _request($method, $url, $params=array(), $uploadFile=array(), $referer='')
- {
- //結果が GET 方式で请求する場合は URL の次の面に接続する必要があります
- if($method == 'GET'){
- $url = $this->_parseUrl($url,$params);
- }
- //設置要求のURL
- curl_setopt($this->ch, CURLOPT_URL, $url);
- //如果是POST
- if($method == 'POST'){
- //定期的に送信されるPOST要求、種類:application/x-www-form-urlencoded
- curl_setopt($this- >ch, CURLOPT_POST, true) ;
- //設置POSTフィールド值
- $postData = $this->_parsmEncode($params,false);
- /*
- //如果有上传文件
- if($uploadFile){
- foreach($uploadFile as $key=>$file){
- if(is_array($file)){
- $n = 0;
- foreach($file as $f){
- //文件必須绝对路径
- $postData[$key.'['.$n++.']'] = '@'.realpath($f);
- }
- }else{
- $postData[$key] = '@'.realpath($file );
- }
- }
- }
- */
- //pr($postData); die;
- curl_setopt($this->ch, CURLOPT_POSTFIELDS, $postData);
- }
- //设置了参照页,否自動设置
- if($referer){
- curl_setopt($this->ch, CURLOPT_REFERER, $referer);
- }else{
- curl_setopt($this->ch, CURLOPT_AUTOREFERER, true);
- }
- //すべての設置情報を取得
- $this->info['before'] =curl_getinfo($this ->ch);
- //開始行请要求
- $result =curl_exec($this->ch);
- //报文头
- を獲得 $headerSize =curl_getinfo($this->ch, CURLINFO_HEADER_SIZE);
- $this->info['header'] = substr($result, 0, $headerSize);
- //去掉报文头
- $result = substr($result, $headerSize);
- //含まれるサービスをすべて取得返された情報
- $this->info['after'] =curl_getinfo($this->ch);
- //如果请要求成功
- if($this->errno() == 0){ // && $this->info['after']['http_code'] == 200
- return $result;
- }else{
- return false;
- }
-
- }
-
- /**
- * GET モードで使用される、解析された URL を返します
- *
- * @param string $url:URL
- * @param array $params: URL の後に追加されるパラメーター
- * @return string
- */
- private function _parseUrl($url,$params)
- {
- $fieldStr = $this->_parsmEncode($params);
- if($fieldStr){
- $url .= strstr($url,'?')===間違い ? 「?」 : '&';
- $url .= $fieldStr;
- }
- return $url;
- }
-
- /**
- * ENCODE パラメータをエンコードします
- *
- * @param array $params: パラメータ
- * @param bool $isRetStr: true: 文字列として返します false: 配列として返します
- * @return string array
- */
- プライベート関数 _parsmEncode($params,$isRetStr=true)
- {
- $fieldStr = '';
- $spr = '';
- $result = array();
- foreach( $params as $key=>$value){
- $value = urlencode($value);
- $fieldStr .= $spr.$key .'='。 $value;
- $spr = '&';
- $result[$key] = $value;
- }
- return $isRetStr ? $fieldStr : $result;
- }
- }
复制代
|