@@ -32,6 +32,7 @@ function tap($value, $callback = null)
3232 * @param string $method 请求方式
3333 * @param array $params 请求参数
3434 * @param array $headers 请求头
35+ * @param array $config 请求配置
3536 *
3637 * @return bool|array
3738 *
@@ -40,7 +41,7 @@ function tap($value, $callback = null)
4041 * $resp=curl("http://httpbin.org/ip", 'get', []);
4142 * die($resp['data']['response']);
4243 */
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 = [] )
4445 {
4546 $ method = strtoupper ($ method );
4647
@@ -52,15 +53,37 @@ function curl(string $url, string $method = "GET", array $params = [], array $he
5253 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 ' );
5354 curl_setopt ($ ch , CURLOPT_CONNECTTIMEOUT , 30 );
5455 curl_setopt ($ ch , CURLOPT_TIMEOUT , 30 );
55- curl_setopt ($ ch , CURLOPT_RETURNTRANSFER , true );
56+ curl_setopt ($ ch , CURLOPT_RETURNTRANSFER , true ); // 要求结果为字符串且输出到屏幕上
5657
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
5776 if (!empty ($ headers )) {
5877 curl_setopt ($ ch , CURLOPT_HTTPHEADER , $ headers );
5978 }
6079
6180 if (stripos ($ url , "https:// " ) !== FALSE ) {
81+ curl_setopt ($ ch , CURLOPT_SSLVERSION , CURL_SSLVERSION_TLSv1);
6282 curl_setopt ($ ch , CURLOPT_SSL_VERIFYPEER , FALSE ); // 对认证证书来源的检查
6383 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 );//严格校验
6487 }
6588
6689 if ($ method === 'POST ' ) {
0 commit comments