>  기사  >  백엔드 개발  >  pQQ공간에서 오랫동안 연락하지 않았던 그 친구를 보셨나요?

pQQ공간에서 오랫동안 연락하지 않았던 그 친구를 보셨나요?

WBOY
WBOY원래의
2016-07-25 08:51:101304검색
오후에는 인기가 많은 공간을 보았는데, 친구들이 오랜만에 연락을 하더군요! 저에게 연락하세요! 자신의 공간에서 보는 사람의 QQ와 닉네임이 사진에 표시됩니다! 이것은 어떻게 이루어 집니까? 여기에 작은 데모를 작성했습니다. QQ 닉네임을 얻으려면 웹페이지를 방문해야 합니다. 여기에 원본 클래스가 있습니다! 직접 사용해 보세요. 얻을 수 있는 방법은 많습니다! 하지만 바로 코드로 가보겠습니다!
  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('#"nickname":"(. *?)"#',$webtext,$rr);
  8. $rrr=$rr[1];
  9. header("콘텐츠 유형:이미지/png");
  10. $ im=imagecreatefromjpeg("1.jpg");
  11. $black = ImageColorAllocate($im, 56,73,136);
  12. $fnt="shenfenzheng.TTF";
  13. imagettftext($im,26,0,110,100 ,$black,"shenfenzheng.TTF",$rrr);
  14. imagettftext($im,26,0,100,180,$black,"shenfenzheng.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", 비어 있으면 사용자의 브라우저가 사용됩니다
  11. 'userAgent'=>'' ,
  12. //연결 시간 초과
  13. 'timeOut'=>30,
  14. //COOKIE 사용 여부는 대부분의 웹사이트에서 사용하므로 켜는 것이 좋습니다.
  15. 'useCookie'=>true ,
  16. / /SSL 지원 여부
  17. 'ssl'=>false,
  18. //클라이언트에서 gzip 압축 지원 여부
  19. 'gzip'=>true,
  20. / /프록시 사용 여부
  21. 'proxy'=>false,
  22. //프록시 유형은 HTTP 또는 SOCKS5를 선택할 수 있습니다.
  23. 'proxyType'=>'HTTP',
  24. //The HTTP 모드인 경우 프록시의 호스트 주소 "http://www.proxy.com"
  25. 과 같은 URL 형식으로 작성해야 합니다. //SOCKS5 방법은 호스트 도메인 이름을 "192.168.1.1"
  26. 'proxyHost'=> 'http://www.proxy.com',
  27. //프록시 호스트의 포트
  28. 'proxyPort' =>1234,
  29. //프록시가 신원 인증을 요구하는지 여부(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. 공개 함수 __construct($setopt =array())
  43. {
  44. //사용자 설정과 시스템 기본 설정 병합
  45. $this- >setopt = array_merge($this->setopt,$setopt);
  46. / / CURL이 설치되지 않은 경우 프로그램 종료
  47. function_exists('curl_init') || die('CURL 라이브러리가 로드되지 않음') ;
  48. //초기화
  49. $this->ch = cur_init();
  50. //CURL 연결을 위한 포트 설정
  51. cur_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. 컬_setopt($this->ch, CURLOPT_PROXYTYPE, $proxyType);
  56. 컬_setopt($this->ch, CURLOPT_PROXY, $this->setopt[ 'proxyHost']);
  57. cur_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. 컬_setopt($this->ch , CURLOPT_PROXYAUTH, $proxyAuthType);
  62. $user = "[{$this->setopt['proxyAuthUser' ]}]:[{$this->setopt['proxyAuthPwd']}]";
  63. cur_setopt($this->ch, CURLOPT_PROXYUSERPWD, $user);
  64. }
  65. }
  66. if (ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off') )
  67. //활성화되면 서버에서 반환된 "위치:"가 헤더에 배치되고 서버에 재귀적으로 반환됩니다.
  68. cur_setopt($this->ch, CURLOPT_FOLLOWLOCATION, true);
  69. / /SSL 지원 열기
  70. if($this->setopt['ssl']){
  71. // 인증서 소스를 확인하지 않습니다
  72. 컬_setopt($this->ch, CURLOPT_SSL_VERIFYPEER , false);
  73. //인증서에서 SSL 암호화 알고리즘이 존재하는지 확인
  74. cur_setopt($this->ch, CURLOPT_SSL_VERIFYHOST , true);
  75. }
  76. //지원하도록 http 헤더 설정 lighttpd 서버에 액세스
  77. $header[]= '예상:';
  78. 컬_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. cur_setopt($this->ch, CURLOPT_CONNECTTIMEOUT, $this->setopt ['timeOut']);
  84. //최대 개수 설정 초 단위 컬 실행 허용
  85. 컬_setopt($this->ch, CURLOPT_TIMEOUT, $this->setopt['timeOut']);
  86. //클라이언트가 gzip 압축 지원 여부 설정
  87. if ($this->setopt['gzip']){
  88. cur_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. //연결 종료 후 쿠키 정보 저장
  95. cur_setopt($this->ch, CURLOPT_COOKIEJAR, $cookfile);
  96. cur_setopt($this-> ;ch, CURLOPT_COOKIEFILE, $cookfile);
  97. }
  98. //헤더 파일 정보를 데이터 스트림(HEADER 정보)으로 출력할지 여부는 여기에 메시지를 보관합니다.
  99. cur_setopt($this->ch, CURLOPT_HEADER , true);
  100. //The 획득된 정보는 직접 출력되는 대신 파일 스트림 형태로 반환됩니다.
  101. curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true) ;
  102. curl_setopt($this->ch, CURLOPT_BINARYTRANSFER, true) ;
  103. }
  104. **
  105. public function get($url,$params=array(), $referer='')
  106. {
  107. return $this->_request('GET', $url, $params, array() , $referer);
  108. }
  109. /**
  110. * 以GET 方式執行請求
  111. *
  112. * @param string $url :請求的URL
  113. * @param array $params :請求的參數,格式如: array('id'=> 10,'name'=>'yuanwei')
  114. * @param array $referer :引用頁,為空時自動設定,如果伺服器有對這個控制的話則一定要設定的.
  115. * @return 錯誤回傳:false 正確回傳:結果內容
  116. */
  117. public function post($url,$params=array(),$uploadFile=array(), $referer= '')
  118. {
  119. return $this->_request('POST', $url, $params, $uploadFile, $referer);
  120. }
  121. /* *
  122. * 以POST 方式執行請求
  123. *
  124. * @param string $url :請求的URL
  125. * @param array $params :請求的參數,格式如: array('id'=> 10,'name'=>'yuanwei')
  126. * @param array $uploadFile :上傳的檔案,支援相對路徑,格式如下
  127. * 單一檔案上傳:array('img1'=>'./file /a.jpg')
  128. * 同字段多個檔案上傳:array('img'=>array('./file/a.jpg','./file/b.jpg'))
  129. * @param array $referer :引用頁,引用頁,為空時自動設定,如果伺服器有對這個控制的話則一定要設定的.
  130. * @return 錯誤回傳:false 正確回傳:結果內容
  131. */
  132. public function error()
  133. {
  134. return curl_error($this->ch);
  135. }
  136. /**
  137. * 得到錯誤訊息
  138. *
  139. * @return string
  140. */
  141. public function errno()
  142. {
  143. return curl_errno($this->ch);
  144. }
  145. /**
  146. * 得到錯誤碼
  147. *
  148. * @return int
  149. */
  150. public function getInfo ()
  151. {
  152. return $this->info;
  153. }
  154. /**
  155. * 得到發送請求前和請求後所有的伺服器資訊和伺服器Header資訊,其中
  156. * [before] :請求前所設定的資訊
  157. * [after] :請求後所有的伺服器資訊
  158. * [header] :伺服器Header封包資訊
  159. *
  160. * @return array
  161. */
  162. public function __destruct()
  163. {
  164. //關閉CURL
  165. curl_close($this->ch);
  166. }
  167. /**
  168. * 析構函數
  169. *
  170. */
  171. 私有函數_request($method, $url, $params =array(), $uploadFile = array(), $referer='')
  172. {
  173. //如果滿足GET方式請求則要連接到後面的URL
  174. if($method == 'GET '){
  175. $ url = $this->_parseUrl($url,$params);
  176. }
  177. //設定請求的URL
  178. curl_setopt($this->ch, CURLOPT_URL, $url);
  179. //如果是POST
  180. if($method == 'POST'){
  181. // 發送一個常規的POST請求,類型為:application/x-www-form-urlencoded
  182. curl_setopt($this-> ch, CURLOPT_POST, true) ;
  183. //設定POST欄位值
  184. $postData = $this->_parsmEncode($params,false);
  185. /*
  186. //如果有上傳檔案
  187. if ($uploadFile){
  188. foreach($uploadFile as $key=>$file){
  189. if(is_array($file)){
  190. $n = 0;
  191. foreach($file as $ f){
  192. //檔案只需是絕對路徑
  193. $postData[$key.'['.$n .']'] = '@ '.realpath($f);
  194. }
  195. }else{
  196. $postData[$key] = '@'.realpath($file);
  197. }
  198. }
  199. }
  200. */
  201. //pr ($發布數據); die;
  202. curl_setopt($this->ch, CURLOPT_POSTFIELDS, $postData);
  203. }
  204. //設定了引用頁,否則自動設定
  205. if($referer){
  206. curl_setopt (curl_setopt (curl_setopt (curl_setopt (curl_setopt (curl_setopt) $this->ch, CURLOPT_REFERER, $referer);
  207. }else{
  208. curl_setopt($this->ch, CURLOPT_AUTOREFERER, true);
  209. }
  210. //取得所有設定的資訊
  211. }
  212. //取得所有設定的資訊
  213. }
  214. //取得所有設定的資訊
  215. $this->info['before'] = curl_getinfo($this->ch);
  216. //開始執行請求
  217. $result = curl_exec($this->ch);
  218. //取得封包頭
  219. $headerSize = curl_getinfo($this->ch, CURLINFO_HEADER_SIZE);
  220. $this->info['header'] = substr($result, 0, $ headerSize) ;
  221. // 刪除封包頭
  222. $result = substr($result, $headerSize);
  223. //取得所有包含伺服器回傳的資訊
  224. $this->info['after'] =curl_getinfo($this->ch);
  225. //如果請求成功
  226. if($this->errno() == 0){ //&& $this->info[ 'after'][' http_code'] == 200
  227. return $result;
  228. }else{
  229. return false;
  230. }
  231. }
  232. /*
  233. }
  234. /*
  235. * 私有方法:執行最終請求
  236. *
  237. * @param string $method :HTTP請求方式
  238. * @param string $url :請求的URL
  239. * @param array $params :請求的參數
  240. * @param array $uploadFile :上傳的檔案(只有POST時才生效)
  241. * @param array $referer :引用頁
  242. * @return 錯誤回傳:false 正確回傳:結果內容
  243. *
  244. * 回傳解析後的URL,GET方式時會用到
  245. *
  246. * @param string $url :URL
  247. * @param array $params :加在URL後的參數
  248. * @return string
  249. * 蒸發函數_parseUrl($url,$params) { $fieldStr = $this->_parsmEncode($params); if($fieldStr){ $url .= strstr ($url,'?')===假? '?
  250. /**
  251. * 매개변수 ENCODE
  252. *
  253. * @param array $params: 매개변수
  254. * @param bool $isRetStr: true: 문자열로 반환 false: 배열로 반환
  255. * @ return string | | 배열
  256. */
  257. 비공개 함수 _parsmEncode($params,$isRetStr=true)
  258. {
  259. $fieldStr = '';
  260. $spr = '' ;
  261. $result = array();
  262. foreach($params as $key=>$value){
  263. $value = urlencode($value);
  264. $fieldStr .= $spr. $키 .'='. $value;
  265. $spr = '&';
  266. $result[$key] = $value;
  267. }
  268. return $isRetStr ? $fieldStr : $result;
  269. }
  270. }
复代码
pQQ공간에서 오랫동안 연락하지 않았던 그 친구를 보셨나요?


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.