@@ -32,6 +32,7 @@ function tap($value, $callback = null)
32
32
* @param string $method 请求方式
33
33
* @param array $params 请求参数
34
34
* @param array $headers 请求头
35
+ * @param array $config 请求配置
35
36
*
36
37
* @return bool|array
37
38
*
@@ -40,7 +41,7 @@ function tap($value, $callback = null)
40
41
* $resp=curl("http://httpbin.org/ip", 'get', []);
41
42
* die($resp['data']['response']);
42
43
*/
43
- function curl (string $ url , string $ method = "GET " , array $ params = [], array $ headers = [])
44
+ function curl(string $ url , string $ method = "GET " , array $ params = [], array $ headers = [], array $ config = [] )
44
45
{
45
46
$ method = strtoupper ($ method );
46
47
@@ -52,15 +53,37 @@ function curl(string $url, string $method = "GET", array $params = [], array $he
52
53
curl_setopt ($ ch , CURLOPT_USERAGENT , 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36 ' );
53
54
curl_setopt ($ ch , CURLOPT_CONNECTTIMEOUT , 30 );
54
55
curl_setopt ($ ch , CURLOPT_TIMEOUT , 30 );
55
- curl_setopt ($ ch , CURLOPT_RETURNTRANSFER , true );
56
+ curl_setopt ($ ch , CURLOPT_RETURNTRANSFER , true ); // 要求结果为字符串且输出到屏幕上
56
57
58
+ // 设置代理
59
+ if (!empty ($ config ['proxy ' ]['host ' ]) && !empty ($ config ['proxy ' ]['port ' ])) {
60
+ curl_setopt ($ ch ,CURLOPT_PROXY , $ config ['proxy ' ]['host ' ]);
61
+ curl_setopt ($ ch ,CURLOPT_PROXYPORT , $ config ['proxy ' ]['port ' ]);
62
+ }
63
+
64
+ if (!empty ($ config ['use_cert ' ]) && $ config ['use_cert ' ] == true ){
65
+ //设置证书
66
+ //使用证书:cert 与 key 分别属于两个 .pem 文件
67
+ if (!empty($ config ['use_cert ' ]['ssl_cert_path ' ] && !empty ($ config ['use_cert ' ]['ssl_key_path ' ]) {
68
+ curl_setopt ($ ch ,CURLOPT_SSLCERTTYPE ,'PEM ' );
69
+ curl_setopt ($ ch ,CURLOPT_SSLCERT , $ config ['use_cert ' ]['ssl_cert_path ' ]);
70
+ curl_setopt ($ ch ,CURLOPT_SSLKEYTYPE ,'PEM ' );
71
+ curl_setopt ($ ch ,CURLOPT_SSLKEY , $ config ['use_cert ' ]['ssl_key_path ' ]);
72
+ }
73
+ }
74
+
75
+ // 设置header
57
76
if (!empty ($ headers )) {
58
77
curl_setopt ($ ch , CURLOPT_HTTPHEADER , $ headers );
59
78
}
60
79
61
80
if (stripos ($ url , "https:// " ) !== FALSE ) {
81
+ curl_setopt ($ ch , CURLOPT_SSLVERSION , CURL_SSLVERSION_TLSv1);
62
82
curl_setopt ($ ch , CURLOPT_SSL_VERIFYPEER , FALSE ); // 对认证证书来源的检查
63
83
curl_setopt ($ ch , CURLOPT_SSL_VERIFYHOST , FALSE ); // 从证书中检查SSL加密算法是否存在
84
+ } else {
85
+ curl_setopt ($ ch ,CURLOPT_SSL_VERIFYPEER , TRUE );
86
+ curl_setopt ($ ch ,CURLOPT_SSL_VERIFYHOST , 2 );//严格校验
64
87
}
65
88
66
89
if ($ method === 'POST ' ) {
0 commit comments