|
|
@@ -1,186 +0,0 @@
|
|
|
-<?php
|
|
|
-/**
|
|
|
- * Created by PhpStorm.
|
|
|
- * User: chendeben
|
|
|
- * Date: 2018/8/31
|
|
|
- * Time: 下午9:35
|
|
|
- */
|
|
|
-
|
|
|
-namespace Heanup\App\Script\Controller;
|
|
|
-
|
|
|
-
|
|
|
-use Exception;
|
|
|
-use Heanup\App\Api\Package\Database\Proxy;
|
|
|
-use Heanup\App\Script\Controller;
|
|
|
-use Heanup\Library\Curl;
|
|
|
-
|
|
|
-class Server extends Controller
|
|
|
-{
|
|
|
-
|
|
|
- /**
|
|
|
- * 执行逻辑
|
|
|
- * @throws Exception
|
|
|
- */
|
|
|
- protected function main()
|
|
|
- {
|
|
|
- while (true){
|
|
|
- echo "开始获取IP" . PHP_EOL;
|
|
|
- $ips = $this->get_ip();
|
|
|
- $this->check_ip($ips);
|
|
|
- echo "休眠30s" . PHP_EOL;
|
|
|
- sleep(30);
|
|
|
- }
|
|
|
-// $ips=Proxy::select();
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- private function check_ip($ip_arr)
|
|
|
- {
|
|
|
-
|
|
|
-
|
|
|
- foreach ($ip_arr as $key => $value) {
|
|
|
-
|
|
|
-
|
|
|
- $response = $this->check_proxy_ip_info($value);
|
|
|
- $ips = explode(":", $value);
|
|
|
- //将结果存入数据库
|
|
|
- if ($response) {
|
|
|
- $insert = [
|
|
|
- 'ip' => $ips[0],
|
|
|
- 'port' => $ips[1],
|
|
|
- 'status' => 1
|
|
|
- ];
|
|
|
- Proxy::replace($insert, ['ip' => $ips[0], 'port' => $ips[1]]);
|
|
|
- echo $value . "\tsuccess " . PHP_EOL;
|
|
|
- } else {
|
|
|
- Proxy::update(['status' => 0], ['ip' => $ips[0], 'port' => $ips[1]]);
|
|
|
- echo $value . "\terror " . PHP_EOL;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //获取各大网站代理IP
|
|
|
- private function get_ip()
|
|
|
- {
|
|
|
- $ip_arr = [];
|
|
|
- echo "正在获取第一个IP列表" . PHP_EOL;
|
|
|
- $ip_arr = $this->get_xici_ip($ip_arr);
|
|
|
- echo "正在获取第二个IP列表" . PHP_EOL;
|
|
|
- $ip_arr = $this->get_kuaidaili_ip($ip_arr);
|
|
|
- return $ip_arr;
|
|
|
- }
|
|
|
-
|
|
|
- private function get_xici_ip($ip_arr)
|
|
|
- {
|
|
|
- for ($i = 1; $i <= 10; $i++) {
|
|
|
- echo sprintf("正在获取xici第%s页IP列表", $i) . PHP_EOL;
|
|
|
- $url = sprintf("http://www.xicidaili.com/nn/%s", intval($i));
|
|
|
- $infoContent = Curl::get($url);
|
|
|
- $this->convert_encoding($infoContent);
|
|
|
- preg_match_all('/<tr.*>[\s\S]*?<td class="country">[\s\S]*?<\/td>[\s\S]*?<td>(.*?)<\/td>[\s\S]*?<td>(.*?)<\/td>/', $infoContent, $match);
|
|
|
-
|
|
|
- $host_arr = $match[1];
|
|
|
- $port_arr = $match[2];
|
|
|
- foreach ($host_arr as $key => $value) {
|
|
|
- $ip_arr[] = $host_arr[$key] . ":" . $port_arr[$key];
|
|
|
- }
|
|
|
- sleep(2);
|
|
|
- }
|
|
|
-
|
|
|
- print_r($ip_arr);
|
|
|
- return $ip_arr;
|
|
|
- }
|
|
|
-
|
|
|
- private function get_kuaidaili_ip($ip_arr)
|
|
|
- {
|
|
|
- for ($i = 1; $i <= 10; $i++) {
|
|
|
- echo sprintf("正在获取kuaidaili第%s页IP列表", $i) . PHP_EOL;
|
|
|
- $url = 'https://www.kuaidaili.com/free/inha/' . $i;
|
|
|
- $infoContent = Curl::get($url);
|
|
|
- $this->convert_encoding($infoContent);
|
|
|
-
|
|
|
- preg_match_all('/<td data-title="IP">(.*?)<\/td>/', $infoContent, $host);
|
|
|
- preg_match_all('/<td data-title="PORT">(.*?)<\/td>/', $infoContent, $port);
|
|
|
-
|
|
|
- $host_arr = $host[1];
|
|
|
- $port_arr = $port[1];
|
|
|
- foreach ($host_arr as $key => $value) {
|
|
|
- $ip_arr[] = $host_arr[$key] . ":" . $port_arr[$key];
|
|
|
- }
|
|
|
- sleep(2);
|
|
|
- }
|
|
|
- print_r($ip_arr);
|
|
|
- return $ip_arr;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * +-----------------------------------------------------------------------------
|
|
|
- * 检查代理ip信息有效性
|
|
|
- * +-----------------------------------------------------------------------------
|
|
|
- * @param string $proxy_ip [117.95.100.126:8998]
|
|
|
- * @param int $times 执行检查次数
|
|
|
- * @return bool
|
|
|
- * @author elinx <654753115@qq.com> 2016-07-29
|
|
|
- * +-----------------------------------------------------------------------------
|
|
|
- */
|
|
|
- function check_proxy_ip_info($proxy_ip = '', $times = 1)
|
|
|
- {
|
|
|
- $status = false;
|
|
|
- $header = array(
|
|
|
- // "GET / HTTP/1.1",
|
|
|
- // "HOST: www.baidu.com",
|
|
|
- "accept: application/json",
|
|
|
- "accept-encoding: gzip, deflate",
|
|
|
- "accept-language: en-US,en;q=0.8",
|
|
|
- "content-type: application/json",
|
|
|
- "user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36",
|
|
|
- );
|
|
|
- $url = 'http://www.baidu.com/';
|
|
|
- $result['succeed_times'] = 0; //成功次数
|
|
|
- $result['defeat_times'] = 0; //失败次数
|
|
|
- $result['total_spen'] = 0; //总用时
|
|
|
- $ip = explode(":", $proxy_ip);
|
|
|
- for ($i = 0; $i < $times; $i++) {
|
|
|
- $curl = curl_init();
|
|
|
- curl_setopt($curl, CURLOPT_URL, $url); //设置传输的url
|
|
|
- curl_setopt($curl, CURLOPT_HTTPHEADER, $header); //发送http报头
|
|
|
- curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
|
|
- curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); // 解码压缩文件
|
|
|
- curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //不验证证SSL书
|
|
|
- curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); //不验证SSL证书
|
|
|
-
|
|
|
- curl_setopt($curl, CURLOPT_HTTPHEADER, array(
|
|
|
- 'Client_Ip: ' . $ip,
|
|
|
- ));
|
|
|
- curl_setopt($curl, CURLOPT_HTTPHEADER, array(
|
|
|
- 'X-Forwarded-For: ' . $ip,
|
|
|
- ));
|
|
|
- curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
|
|
|
- curl_setopt($curl, CURLOPT_PROXY, $proxy_ip);
|
|
|
-
|
|
|
- curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
|
|
|
- curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
|
|
|
- curl_setopt($curl, CURLOPT_TIMEOUT, 10); // 设置超时限制防止死循环
|
|
|
- // $response_header = curl_getinfo($curl); // 获取返回response报头
|
|
|
- $content = curl_exec($curl);
|
|
|
- if (strstr($content, '百度一下,你就知道')) {
|
|
|
- $status = true;
|
|
|
- break;
|
|
|
- } else {
|
|
|
- $status = false;
|
|
|
- }
|
|
|
-
|
|
|
- // $result['list'][$i]['response_header'] = $response_header;
|
|
|
- }
|
|
|
- return $status;
|
|
|
- }
|
|
|
-
|
|
|
- private function convert_encoding(&$str)
|
|
|
- {
|
|
|
- $encode = mb_detect_encoding($str, ['GB2312', 'UTF-8', 'GBK', 'ASCII']);
|
|
|
- $str = iconv($encode, 'utf-8//TRANSLIT//IGNORE', $str);
|
|
|
- }
|
|
|
-
|
|
|
-}
|