Skip to content

Commit ae40120

Browse files
committed
init
1 parent 07e7d48 commit ae40120

10 files changed

+595
-0
lines changed

composer.json

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"name": "swover/http",
3+
"description": "Http Client",
4+
"keywords": [
5+
"swoole",
6+
"http",
7+
"guzzle",
8+
"curl"
9+
],
10+
"homepage": "https://github.com/swover/http",
11+
"license": "MIT",
12+
"authors": [
13+
{
14+
"name": "Ruesin Liu",
15+
"email": "[email protected]"
16+
}
17+
],
18+
"require": {
19+
"php": ">=7.0"
20+
},
21+
"require-dev": {
22+
"ext-curl": "*",
23+
"guzzlehttp/guzzle": "6.3.0"
24+
},
25+
"autoload": {
26+
"psr-4": {
27+
"Swover\\Http\\": "src/"
28+
}
29+
},
30+
"autoload-dev": {
31+
"psr-4": {
32+
}
33+
}
34+
}

src/Client.php

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
namespace Swover\Http;
4+
5+
use Swover\Http\Client\BaseClient;
6+
use Swover\Http\Client\Curl;
7+
use Swover\Http\Client\Guzzle;
8+
use Swover\Http\Client\Stream;
9+
use Swover\Http\Client\Swoole;
10+
11+
class Client
12+
{
13+
protected static $handler = false;
14+
15+
public static function getClient($config)
16+
{
17+
if (PHP_SAPI == 'cli'
18+
&& class_exists('\Swoole\Coroutine')
19+
&& \Swoole\Coroutine::getCid() > 0) {
20+
if (self::$handler === false) return new Swoole($config);
21+
}
22+
23+
if (self::$handler === false || !class_exists(self::$handler)) {
24+
if (class_exists('\GuzzleHttp\Client')) return new Guzzle($config);
25+
26+
if (extension_loaded('curl')) return new Curl($config);
27+
28+
return new Stream($config);
29+
}
30+
31+
return new (self::$handler)($config);
32+
}
33+
34+
public static function setHandler($handler)
35+
{
36+
if (is_object($handler) && $handler instanceof BaseClient) {
37+
return self::$handler = get_class($handler);
38+
}
39+
40+
if ($handler == 'curl') return self::$handler = '\Swover\Http\Client\Curl';
41+
42+
if ($handler == 'guzzle') return self::$handler = '\Swover\Http\Client\Guzzle';
43+
44+
return self::$handler = false;
45+
}
46+
}

src/Client/BaseClient.php

+88
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<?php
2+
3+
namespace Swover\Http\Client;
4+
5+
abstract class BaseClient
6+
{
7+
protected $timeout = 10;
8+
9+
protected $allow_redirects = true;
10+
11+
protected $max_jump = 10;
12+
13+
public function __construct($config)
14+
{
15+
if (isset($config['allow_redirects'])) {
16+
$this->allow_redirects = boolval($config['allow_redirects']);
17+
}
18+
19+
if (isset($config['timeout'])) {
20+
$this->timeout = intval($config['timeout']);
21+
}
22+
}
23+
24+
abstract public function request($method, $url, $params, $jump_number = 0);
25+
26+
protected function randUserAgent()
27+
{
28+
$agents = [
29+
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
30+
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
31+
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
32+
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
33+
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
34+
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
35+
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
36+
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
37+
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
38+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
39+
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
40+
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
41+
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
42+
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
43+
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
44+
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
45+
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
46+
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
47+
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
48+
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
49+
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0",
50+
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
51+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
52+
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
53+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
54+
"Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
55+
"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
56+
"Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
57+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
58+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
59+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)",
60+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
61+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)",
62+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)",
63+
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
64+
];
65+
return $agents[array_rand($agents)];
66+
}
67+
68+
protected function randomMobileAgent()
69+
{
70+
$agents = [
71+
'Mozilla/5.0 (Linux; Android 7.0; STF-AL10 Build/HUAWEISTF-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043508 Safari/537.36 V1_AND_SQ_7.2.0_730_YYB_D QQ/7.2.0.3270 NetType/4G WebP/0.3.0 Pixel/1080',
72+
'Mozilla/5.0 (Linux; U; Android 7.0; zh-CN; SM-G9550 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.7.0.953 Mobile Safari/537.36',
73+
'Mozilla/5.0 (Linux; Android 5.1; m3 note Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.116 Mobile Safari/537.36 T7/9.3 baiduboxapp/9.3.0.10 (Baidu; P1 5.1)',
74+
'Mozilla/5.0 (Linux; U; Android 6.0.1; zh-CN; SM-C7000 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.6.2.948 Mobile Safari/537.36',
75+
'Mozilla/5.0 (Linux; U; Android 7.0; zh-CN; ZUK Z2121 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.6.8.952 Mobile Safari/537.36',
76+
'Mozilla/5.0 (Linux; Android 6.0; LEX626 Build/HEXCNFN5902606111S) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/35.0.1916.138 Mobile Safari/537.36 T7/7.4 baiduboxapp/8.3.1 (Baidu; P1 6.0)',
77+
'Mozilla/5.0 (Linux; U; Android 7.0; zh-cn; STF-AL00 Build/HUAWEISTF-AL00) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.9 Mobile Safari/537.36',
78+
'Mozilla/5.0 (Linux; Android 5.1.1; vivo Xplay5A Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.116 Mobile Safari/537.36 T7/9.3 baiduboxapp/9.3.0.10 (Baidu; P1 5.1.1)',
79+
'Mozilla/5.0 (Linux; U; Android 7.0; zh-CN; MI 5s Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.7.0.953 Mobile Safari/537.36',
80+
'Mozilla/5.0 (Linux; Android 7.1.1; MI 6 Build/NMF26X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 Mobile Safari/537.36 Maxthon/3047',
81+
'Mozilla/5.0 (Linux; Android 7.0; MIX Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043508 Safari/537.36 V1_AND_SQ_7.2.0_730_YYB_D QQ/7.2.0.3270 NetType/WIFI WebP/0.3.0 Pixel/1080',
82+
'Mozilla/5.0 (Linux; U; Android 7.1.1; zh-CN; OD105 Build/NMF26F) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.7.0.953 Mobile Safari/537.36',
83+
'Mozilla/5.0 (Linux; U; Android 7.1.1; zh-CN; OD105 Build/NMF26F) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/11.7.8.958 Mobile Safari/537.36',
84+
'Mozilla/5.0 (Linux; Android 5.1.1; SM801 Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043015 Safari/537.36 V1_AND_SQ_6.6.9_482_YYB_D QQ/6.6.9.3060 NetType/2G WebP/0.3.0 Pixel/1080'
85+
];
86+
return $agents[array_rand($agents)];
87+
}
88+
}

src/Client/Curl.php

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace Swover\Http\Client;
4+
5+
class Curl extends BaseClient
6+
{
7+
public function request($method, $url, $params, $jump_number = 0)
8+
{
9+
// TODO: Implement request() method.
10+
}
11+
}

src/Client/Guzzle.php

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace Swover\Http\Client;
4+
5+
class Guzzle extends BaseClient
6+
{
7+
public function request($method, $url, $params, $jump_number = 0)
8+
{
9+
// TODO: Implement request() method.
10+
}
11+
}

src/Client/Stream.php

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace Swover\Http\Client;
4+
5+
class Stream extends BaseClient
6+
{
7+
public function request($method, $url, $params, $jump_number = 0)
8+
{
9+
// TODO: Implement request() method.
10+
}
11+
}

0 commit comments

Comments
 (0)