跳到内容
导航菜单
切换导航
登录
产品
行动
自动化任何工作流
包装
托管和管理程序包
安全
查找并修复漏洞
代码空间
即时开发环境
GitHub Copilot公司
使用AI编写更好的代码
代码审查
管理代码更改
问题
计划和跟踪工作
讨论
在代码外协作
探索
所有功能
文档
GitHub技能
博客
解决
按大小
企业
团队
创业公司
按行业划分
保健
金融服务
制造业
按用例
CI/CD和自动化
开发运营
开发安全操作
资源
话题
人工智能
开发运营
安全
软件开发
查看全部
探索
学习途径
白皮书、电子书、网络研讨会
客户案例
合作伙伴
开放源代码
GitHub赞助商
资助开源开发人员
ReadME项目
GitHub社区文章
存储库
话题
趋向
收藏
企业
企业平台
AI驱动的开发人员平台
可用附加组件
高级安全
企业级安全功能
GitHub Copilot公司
企业级AI功能
特优支持
企业级全天候支持
定价
搜索或跳转到。。。
搜索代码、存储库、用户、问题、推送请求。。。
搜索
清除
搜索语法提示
提供反馈
我们阅读了每一条反馈,并非常认真地对待您的意见。
包括我的电子邮件地址以便联系我
保存的搜索
使用保存的搜索更快地筛选结果
姓名
查询
要查看所有可用的限定符,请参阅我们的
文档
.
登录
注册
重置焦点
您使用另一个选项卡或窗口登录。
重新加载
刷新会话。
您在另一个选项卡或窗口中注销。
重新加载
刷新会话。
您在另一个选项卡或窗口上切换了帐户。
重新加载
刷新会话。
解除警报
{{消息}}
WordPress(文字出版社)
/
文字印刷-开发
公共镜像
镜像自
git://develop.git.wordpress.org/
通知
您必须登录才能更改通知设置
福克
2.5公里
星星
2.5公里
代码
Pull请求
1.7公里
行动
安全
洞察力
其他导航选项
代码
Pull请求
行动
安全
洞察力
文件夹
6.5
面包屑
文字印刷-开发
/
型钢混凝土
/
wp包括
/
请求
/
型钢混凝土
/
运输
/
Fsockopen.php公司
责备
责备
最新提交
历史
历史
510行(423个位置)·15.1 KB
6.5
面包屑
文字印刷-开发
/
型钢混凝土
/
wp包括
/
请求
/
型钢混凝土
/
运输
/
Fsockopen.php公司
顶部
文件元数据和控件
代码
责备
510行(423个位置)·15.1 KB
原始
1
2
三
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
<?
php(电话)
/**
*fsockopen HTTP传输
*
*@package请求\传输
*/
命名空间
WpOrg公司
\
请求
\
运输
;
使用
WpOrg公司
\
请求
\
能力
;
使用
WpOrg公司
\
请求
\
例外
;
使用
WpOrg公司
\
请求
\
例外
\
无效参数
;
使用
WpOrg公司
\
请求
\
端口
;
使用
WpOrg公司
\
请求
\
请求
;
使用
WpOrg公司
\
请求
\
Ssl公司
;
使用
WpOrg公司
\
请求
\
运输
;
使用
WpOrg公司
\
请求
\
公用事业
\
不区分情况定义
;
使用
WpOrg公司
\
请求
\
公用事业
\
输入验证程序
;
/**
*fsockopen HTTP传输
*
*@package请求\传输
*/
最终的
班
Fsockopen(打开套接字)
实施
运输
{
/**
*秒到微秒的转换
*
*@var整数
*/
常数
秒_IN_m微秒
=
1000000
;
/**
*原始HTTP数据
*
*@var字符串
*/
公众的
$
标题
=
''
;
/**
*流元数据
*
*@var数组属性的关联数组,请参见{@link
https://www.php.net/stream_get_meta_data(网址:https://www.php.net/stream_get_meta_data)
}
*/
公众的
$
信息
;
/**
*我们应该保留的最大字节数是多少?
*
*@var int|bool字节计数,如果没有限制,则为false。
*/
私有的
$
最大字节数(_B)
=
假
;
/**
*缓存接收到的连接错误。
*
*@var字符串
*/
私有的
$
连接错误(_E)
=
''
;
/**
*执行请求
*
*@param string |要请求的Stringable$url url
*@param array$headers请求头的关联数组
*@param string | array$data要作为POST正文或GET/HEAD URL中的参数发送的数据
*@param array$options请求选项,请参阅{@有关文档,请参阅\WpOrg\Requests\Requests::response()}
*@return string原始HTTP结果
*
*@throws\WpOrg\Requests\Exception\InvalidArgument当传递的$url参数不是字符串或Stringable时。
*@throws\WpOrg\Requests\Exception\InvalidArgument当传递的$headers参数不是数组时。
*@throws\WpOrg\Requests\Exception\InvalidArgument当传递的$data参数不是数组或字符串时。
*@throws\WpOrg\Requests\Exception\InvalidArgument当传递的$options参数不是数组时。
*@throws\WpOrg\Requests\Exception连接套接字失败(`fsockopenerror`)
*@throws\WpOrg\Requests\Exception关于套接字超时(`timeout`)
*/
公众的
功能
请求
(
$
网址
,
$
标题
= [],
$
数据
= [],
$
选项
= []) {
如果
(
输入验证程序
::
可字符串化
(
$
网址
) ===
假
) {
扔
无效参数
::
创造
(
1
,
'
$网址
'
,
'
string|可串
'
,
gettype(获取类型)
(
$
网址
));
}
如果
(
是数组(_A)
(
$
标题
) ===
假
) {
扔
无效参数
::
创造
(
2
,
'
$个标题
'
,
'
阵列
'
,
gettype(获取类型)
(
$
标题
));
}
如果
(!
是数组(_A)
(
$
数据
) && !
是字符串
(
$
数据
)) {
如果
(
$
数据
===
无效的
) {
$
数据
=
''
;
}
其他的
{
扔
无效参数
::
创造
(
三
,
'
$数据
'
,
'
数组|字符串
'
,
gettype(获取类型)
(
$
数据
));
}
}
如果
(
是数组(_A)
(
$
选项
) ===
假
) {
扔
无效参数
::
创造
(
4
,
'
$个选项
'
,
'
阵列
'
,
gettype(获取类型)
(
$
选项
));
}
$
选项
[
'
挂钩
'
]->
派遣
(
'
fsockopen.请求前
'
);
$
url部件
=
解析url
(
$
网址
);
如果
(
空的
(
$
url部件
)) {
扔
新的
例外
(
'
URL无效。
'
,
'
无效URL
'
,
$
网址
);
}
$
主办
=
$
url部件
[
'
主办
'
];
$
上下文
=
流上下文创建
();
$
验证名称
=
假
;
$
case_insitive_headers(区分大小写)
=
新的
不区分情况定义
(
$
标题
);
//HTTPS支持
如果
(
发行
(
$
url部件
[
'
方案
'
]) &&
斯特劳尔
(
$
url部件
[
'
方案
'
]) ===
'
https(https)
'
) {
$
远程插座
=
'
ssl://
'
.
$
主办
;
如果
(!
发行
(
$
url部件
[
'
港口
'
])) {
$
url部件
[
'
港口
'
] =
端口
::
HTTPS协议
;
}
$
上下文选项(_O)
= [
'
验证对等
'
=>
真的
,
'
捕获人签名
'
=>
真的
,
];
$
验证名称
=
真的
;
//SNI,如果启用(OpenSSL>=0.9.8j)
//phpcs:忽略PHPCompatibility。
常量。
找到新常量.openssl_tlsext_server_name
如果
(
定义
(
'
打开SL_TLSEXT_SERVER_NAME
'
) &&
打开SL_TLSEXT_SERVER_NAME
) {
$
上下文选项(_O)
[
'
SNI已启用(_E)
'
] =
真的
;
如果
(
发行
(
$
选项
[
'
验证名称
'
]) &&
$
选项
[
'
验证名称
'
] ===
假
) {
$
上下文选项
[
'
SNI已启用(_E)
'
] =
假
;
}
}
如果
(
发行
(
$
选项
[
'
验证
'
])) {
如果
(
$
选项
[
'
验证
'
] ===
假
) {
$
上下文选项(_O)
[
'
验证对等
'
] =
假
;
$
上下文选项(_O)
[
'
验证人员姓名
'
] =
假
;
$
验证名称
=
假
;
}
埃尔塞夫
(
是字符串
(
$
选项
[
'
验证
'
])) {
$
上下文选项(_O)
[
'
卡菲尔
'
] =
$
选项
[
'
验证
'
];
}
}
如果
(
发行
(
$
选项
[
'
验证名称
'
]) &&
$
选项
[
'
验证名称
'
] ===
假
) {
$
上下文选项(_O)
[
'
验证人员姓名
'
] =
假
;
$
验证名称
=
假
;
}
流上下文设置选项
(
$
上下文
, [
'
ssl协议
'
=>
$
上下文选项(_O)
]);
}
其他的
{
$
远程插座
=
'
传输控制协议://
'
.
$
主办
;
}
$
这
->
最大字节数(_B)
=
$
选项
[
'
最大字节数(_B)
'
];
如果
(!
发行
(
$
url部件
[
'
港口
'
])) {
$
url部件
[
'
港口
'
] =
端口
::
超文本传输协议
;
}
$
远程插座
.=
'
:
'
.
$
url部件
[
'
港口
'
];
//phpcs:忽略WordPress。
菲律宾比索。
开发功能.error_log_set_error_handler
设置错误处理程序
([
$
这
,
'
连接错误处理程序
'
],
E_警告
|
E_通知
);
$
选项
[
'
挂钩
'
]->
派遣
(
'
fsockopen.remote_socket锁定
'
, [&
$
远程插座
]);
$
插座
=
流套接字客户端
(
$
远程插座
,
$
错误编号
,
$
错误str
,
天花板
(
$
选项
[
'
连接超时
'
]),
流_序列_连接
,
$
上下文
);
恢复错误处理程序
();
如果
(
$
验证名称
&& !
$
这
->
验证证书来自上下文
(
$
主办
,
$
上下文
)) {
扔
新的
例外
(
'
SSL证书与请求的域名不匹配
'
,
'
ssl.no_match(不匹配)
'
);
}
如果
(!
$
插座
) {
如果
(
$
错误编号
===
0
) {
//连接问题
扔
新的
例外
(
rtrim公司
(
$
这
->
连接错误(_E)
),
'
fsockopen.connect错误
'
);
}
扔
新的
例外
(
$
错误str
,
'
fsockopenerror(锁打开错误)
'
,
无效的
,
$
错误编号
);
}
$
数据格式(_F)
=
$
选项
[
'
数据格式(_F)
'
];
如果
(
$
数据格式(_F)
===
'
查询
'
) {
$
路径
=
自己
::
格式_获取
(
$
url部件
,
$
数据
);
$
数据
=
''
;
}
其他的
{
$
路径
=
自己
::
格式_获取
(
$
url部分
, []);
}
$
选项
[
'
挂钩
'
]->
派遣
(
'
fsockopen.remote主机路径
'
, [&
$
路径
,
$
网址
]);
$
请求_正文
=
''
;
$
外面的
=
把格式数据写成串
(
"
%s%s HTTP/%.1F
\\r\n“
,
$
选项
[
'
类型
'
],
$
路径
,
$
选项
[
'
协议版本
'
]);
如果
(
$
选项
[
'
类型
'
] !==
请求
::
跟踪
) {
如果
(
是数组(_A)
(
$
数据
)) {
$
请求_正文
=
http_build_query(http_构建查询)
(
$
数据
,
''
,
'
&
'
);
}
其他的
{
$
请求_正文
=
$
数据
;
}
//始终在POST请求中包含内容长度以防止
//当正文为空时,来自某些服务器的411个错误。
如果
(!
空的
(
$
数据
) ||
$
选项
[
'
类型
'
] ===
请求
::
邮政
) {
如果
(!
发行
(
$
case_insitive_headers(区分大小写)
[
'
内容物-长度
'
])) {
$
标题
[
'
内容物-长度
'
] =
斯特伦
(
$
请求_正文
);
}
如果
(!
发行
(
$
case_insitive_headers(区分大小写)
[
'
内容类型
'
])) {
$
标题
[
'
内容类型
'
] =
'
应用程序/x-www-form-urlencoded;
字符集=UTF-8
'
;
}
}
}
如果
(!
发行
(
$
case_insitive_headers(区分大小写)
[
'
主机
'
])) {
$
外面的
.=
把格式数据写成串
(
'
主机:%s
'
,
$
url部件
[
'
主办
'
]);
$
scheme_lower(模式_降低)
=
斯特劳尔
(
$
url部件
[
'
方案
'
]);
如果
((
$
scheme_lower(模式_降低)
===
'
http协议
'
&&
$
url部件
[
'
港口
'
] !==
端口
::
超文本传输协议
) || (
$
scheme_lower(模式_降低)
===
'
https(https)
'
&&
$
url部件
[
'
港口
'
] !==
端口
::
HTTPS协议
)) {
$
外面的
.=
'
:
'
.
$
url部件
[
'
港口
'
];
}
$
外面的
.=
“\r\n”
;
}
如果
(!
发行
(
$
case_insitive_headers(区分大小写)
[
'
用户代理
'
])) {
$
外面的
.=
把格式数据写成串
(
"
用户代理:%s
\\r\n“
,
$
选项
[
'
字符串
'
]);
}
$
接受编码
=
$
这
->
接受编码
();
如果
(!
发行
(
$
case_insitive_headers(区分大小写)
[
'
接受编码
'
]) && !
空的
(
$
接受编码
)) {
$
外面的
.=
把格式数据写成串
(
"
接受编码:%s
\\r\n“
,
$
接受编码
);
}
$
标题
=
请求
::
压扁
(
$
标题
);
如果
(!
空的
(
$
标题
)) {
$
外面的
.=
内爆
(
“\r\n”
,
$
标题
) .
“\r\n”
;
}
$
选项
[
'
挂钩
'
]->
派遣
(
'
fsockopen.after_headers(锁定打开后标题)
'
, [&
$
外面的
]);
如果
(
子(substr)
(
$
外面的
, -
2
) !==
“\r\n”
) {
$
外面的
.=
“\r\n”
;
}
如果
(!
发行
(
$
case_insitive_headers(区分大小写)
[
'
连接
'
])) {
$
外面的
.=
"
连接:关闭
\\r\n“
;
}
$
外面的
.=
“\r\n”
.
$
请求_正文
;
$
选项
[
'
挂钩
'
]->
派遣
(
'
fsockopen.before_send(发送前锁定)
'
, [&
$
外面的
]);
写入文件
(
$
插座
,
$
外面的
);
$
选项
[
'
挂钩
'
]->
派遣
(
'
fsockopen.after_send(发送后锁定)
'
, [
$
外面的
]);
如果
(!
$
选项
[
'
舞台调度
'
]) {
f关闭
(
$
插座
);
$
fake_headers
=
''
;
$
选项
[
'
挂钩
'
]->
派遣
(
'
fsockopen.请求后
'
, [&
$
fake_headers
]);
返回
''
;
}
$
超时秒
= (
整数
)
地板
(
$
选项
[
'
超时
'
]);
如果
(
$
超时秒
===
$
选项
[
'
超时
'
]) {
$
超时_秒
=
0
;
}
其他的
{
$
超时_秒
=
自己
::
秒_IN_微秒
*
$
选项
[
'
超时
'
] %
自己
::
秒_IN_微秒
;
}
stream_set_timeout(流设置超时)
(
$
插座
,
$
超时秒
,
$
超时_秒
);
$
响应
=
''
;
$
身体
=
''
;
$
标题
=
''
;
$
这
->
信息
=
流获取元数据
(
$
插座
);
$
大小
=
0
;
$
干衣
=
假
;
$
下载
=
假
;
如果
(
$
选项
[
'
文件名
'
]) {
//phpcs:忽略WordPress。
菲律宾比索。
NoSilencedErrors——关闭PHP本机警告,支持抛出异常。
$
下载
= @
fopen公司
(
$
选项
[
'
文件名
'
],
'
白车身
'
);
如果
(
$
下载
===
假
) {
$
错误
=
错误_get_last
();
扔
新的
例外
(
$
错误
[
'
消息
'
],
'
fopen公司
'
);
}
}
虽然
(!
费夫
(
$
插座
)) {
$
这
->
信息
=
流获取元数据
(
$
插座
);
如果
(
$
这
->
信息
[
'
超时
'
]) {
扔
新的
例外
(
'
fsocket超时
'
,
'
超时
'
);
}
$
块
=
弗雷德
(
$
插座
,
请求
::
缓冲器_尺寸
);
如果
(!
$
干衣
) {
$
响应
.=
$
块
;
如果
(
斯特波斯
(
$
响应
,
“\r\n\r\n”
)) {
列表
(
$
标题
,
$
块
) =
爆炸
(
“\r\n\r\n”
,
$
响应
,
2
);
$
干衣
=
真的
;
}
}
//我们现在处于身体模式吗?
如果
(
$
干衣
) {
$
选项
[
'
挂钩
'
]->
派遣
(
'
请求程序
'
, [
$
块
,
$
大小
,
$
这
->
最大字节数(_B)
]);
$
数据_长度
=
斯特伦
(
$
块
);
如果
(
$
这
->
最大字节数(_B)
) {
//我们已经达到极限了吗?
如果
(
$
大小
===
$
这
->
最大字节数(_B)
) {
持续
;
}
如果
((
$
大小
+
$
数据_长度
) >
$
这
->
最大字节数(_B)
) {
//限制长度
$
限制的长度
= (
$
这
->
最大字节数(_B)
-
$
大小
);
$
块
=
子(substr)
(
$
块
,
0
,
$
限制的长度
);
}
}
$
大小
+=
斯特伦
(
$
块
);
如果
(
$
下载
) {
写入文件
(
$
下载
,
$
块
);
}
其他的
{
$
身体
.=
$
块
;
}
}
}
$
这
->
标题
=
$
标题
;
如果
(
$
下载
) {
f关闭
(
$
下载
);
}
其他的
{
$
这
->
标题
.=
“\r\n\r\n”
.
$
身体
;
}
f关闭
(
$
插座
);
$
选项
[
'
挂钩
'
]->
派遣
(
'
fsockopen.请求后
'
, [&
$
这
->
标题
, &
$
这
->
信息
]);
返回
$
这
->
标题
;
}
/**
*同时发送多个请求
*
*@param array$requests根据{@参见\WpOrg\requests\Transport::Request()}请求数据(“url”、“headers”、“data”、“options”数组)
*@param array$options全局选项,请参阅{@有关文档,请参阅\WpOrg\Requests\Requests::response()}
*@return数组\WpOrg\Requests\Response对象的数组(可以包含\WpOrg\Requests\Exception或字符串响应)
*
*@throws\WpOrg\Requests\Exception\InvalidArgument当传递的$Requests参数不是数组或具有数组访问权限的可迭代对象时。
*@throws\WpOrg\Requests\Exception\InvalidArgument当传递的$options参数不是数组时。
*/
公众的
功能
请求_多重
(
$
请求
,
$
选项
) {
//如果你没有要求,我们无法得到任何回应
如果
(
空的
(
$
请求
)) {
返回
[];
}
如果
(
输入验证程序
::
具有阵列访问权限
(
$
请求
) ===
假
||
输入验证程序
::
可更改(_I)
(
$
请求
) ===
假
) {
扔
无效参数
::
创造
(
1
,
'
$个请求
'
,
'
array|ArrayAccess可遍历(&R)
'
,
gettype(获取类型)
(
$
请求
));
}
如果
(
是数组(_A)
(
$
选项
) ===
假
) {
扔
无效参数
::
创造
(
2
,
'
$个选项
'
,
'
阵列
'
,
gettype(获取类型)
(
$
选项
));
}
$
响应
= [];
$
班
=
获取类(_C)
(
$
这
);
foreach公司
(
$
请求
作为
$
身份证件
=>
$
请求
) {
尝试
{
$
处理程序
=
新的
$
班
();
$
响应
[
$
身份证件
] =
$
处理程序
->
请求
(
$
请求
[
'
网址
'
],
$
请求
[
'
标题
'
],
$
请求
[
'
数据
'
],
$
请求
[
'
选项
'
]);
$
请求
[
'
选项
'
][
'
挂钩
'
]->
派遣
(
'
运输.内部.场地_响应
'
, [&
$
响应
[
$
身份证件
],
$
请求
]);
}
抓住
(
例外
$
e(电子)
) {
$
响应
[
$
身份证件
] =
$
e(电子)
;
}
如果
(!
是字符串
(
$
响应
[
$
身份证件
])) {
$
请求
[
'
选项
'
][
'
挂钩
'
]->
派遣
(
'
多个请求完成
'
, [&
$
响应
[
$
身份证件
],
$
身份证件
]);
}
}
返回
$
响应
;
}
/**
*检索我们可以接受的编码
*
*@return string Accept-Encoding头值
*/
私有的
静止的
功能
接受编码
() {
$
类型
= [];
如果
(
函数_存在
(
'
gz充气
'
)) {
$
类型
[] =
'
放气;
q=1.0
'
;
}
如果
(
函数_存在
(
'
gz解压缩
'
)) {
$
类型
[] =
'
压缩;
q=0.5
'
;
}
$
类型
[] =
'
gzip;
q=0.5
'
;
返回
内爆
(
'
,
'
,
$
类型
);
}
/**
*设置给定GET数据的URL格式
*
*@param array$url_parts从{@link收到的url部分的数组
https://www.php.net/parse_url
}
*@param array | object$data要使用的生成查询的数据,请参见{@link
https://www.php.net/http_build_query网站
}
*@return带数据的字符串URL
*/
私有的
静止的
功能
格式_获取
(
$
url部件
,
$
数据
) {
如果
(!
空的
(
$
数据
)) {
如果
(
空的
(
$
url部分
[
'
查询
'
])) {
$
url部分
[
'
查询
'
] =
''
;
}
$
url部件
[
'
查询
'
] .=
'
&
'
.
http_build_query(http_构建查询)
(
$
数据
,
''
,
'
&
'
);
$
url部件
[
'
查询
'
] =
修剪
(
$
url部件
[
'
查询
'
],
'
&
'
);
}
如果
(
发行
(
$
url部件
[
'
路径
'
])) {
如果
(
发行
(
$
url部分
[
'
查询
'
])) {
$
得到
=
$
url部件
[
'
路径
'
] .
'
?
'
.
$
url部件
[
'
查询
'
];
}
其他的
{
$
得到
=
$
url部件
[
'
路径
'
];
}
}
其他的
{
$
得到
=
'
/
'
;
}
返回
$
得到
;
}
/**
*stream_socket_client()的错误处理程序
*
*@param int$errno错误号(例如e_WARNING)
*@param string$errstr错误消息
*/
公众的
功能
连接错误处理程序
(
$
错误编号
,
$
错误str
) {
//我们可以处理它
如果
((
$
错误编号
&
E_警告
) ===
0
&& (
$
错误编号
&
E_通知
) ===
0
) {
//返回false以指示应启用默认错误处理程序
返回
假
;
}
$
这
->
连接错误(_E)
.=
$
错误str
.
“\n”
;
返回
真的
;
}
/**
*根据通用名称和使用者替代名称验证证书
*
*不幸的是,PHP没有根据替代项检查证书
*名字,比如“
https://www.github.com/
'无效。
*相反
*
*@链接
https://tools.ietf.org/html/rfc2818#部分
-RFC2818第3.1节
*
*@param string$host要验证的主机名
*@param resource$context流上下文
*@return布尔
*
*@throws\WpOrg\Requests\Exception通过TLS连接失败(`fsockopen.ssl.connect_error`)
*@throws\WpOrg\Requests\Exception未获取主机匹配项(`fsockopen.ssl.no_match`)
*/
公众的
功能
验证证书来自上下文
(
$
主办
,
$
上下文
) {
$
元
=
流上下文获取选项
(
$
上下文
);
//如果我们没有SSL选项,则无法在进行连接
//全部
如果
(
空的
(
$
元
) ||
空的
(
$
元
[
'
ssl协议
'
]) ||
空的
(
$
元
[
'
ssl协议
'
][
'
对等证书(_C)
'
])) {
扔
新的
例外
(
rtrim公司
(
$
这
->
连接错误(_E)
),
'
ssl.connect错误
'
);
}
$
证书
=
打开ssl_x509_parse
(
$
元
[
'
ssl协议
'
][
'
对等证书(_C)
'
]);
返回
Ssl公司
::
验证证书
(
$
主办
,
$
证书
);
}
/**
*自检运输工具是否可用。
*
*可以在{@参见\WpOrg\Requests\Capability}中找到可用的测试功能。
*
*@codeCoverage忽略
*@param array<string,bool>$capabilities可选。
要测试的功能的关联数组,即“[”<功能>“=>true]”。
*@return bool是否可以使用传输。
*/
公众的
静止的
功能
测试
(
$
能力
= []) {
如果
(!
函数_存在
(
'
fsockopen(锁定打开)
'
)) {
返回
假
;
}
//如果需要,请检查流是否支持SSL
如果
(
发行
(
$
能力
[
能力
::
SSL协议
]) &&
$
能力
[
能力
::
SSL协议
]) {
如果
(!
加载的扩展
(
'
开放ssl
'
) || !
函数_存在
(
'
打开ssl_x509_parse
'
)) {
返回
假
;
}
}
返回
真的
;
}
}
此时无法执行该操作。