流程
- 收集头部信息
- 收集请求数据
- 转换头部信息为 CURL 头部请求格式
- 使用 Curl 进行转发
收集 HTTP 头信息
1
2
3
4
5
6
7
8
9
|
function
getAllHeaders
() {
$headers
= [];
foreach
(
$_SERVER
as
$name
=>
$value
) {
if
(
substr
(
$name
, 0, 5) ==
'HTTP_'
) {
$headers
[
str_replace
(
' '
,
'-'
, ucwords(
strtolower
(
str_replace
(
'_'
,
' '
,
substr
(
$name
, 5)))))] =
$value
;
}
}
return
$headers
;
}
|
使用 PHP 封装协议获取输入数据
1
|
$content
=
file_get_contents
(
'php://input'
)
|
转换头信息为 Curl 请求格式
1
2
3
4
5
6
|
$headers
=
getAllHeaders
();
$header_joins
= [];
foreach
(
$headers
as
$k
=>
$v
) {
if
(
$k
==
'X-Pingplusplus-Signature'
||
$k
==
'Content-Type'
)
array_push
(
$header_joins
,
$k
.
': '
.
$v
);
}
|
使用 Curl 进行转发
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
function
post(
$url
,
$headers
,
$raw_data
) {
$ch
= curl_init();
curl_setopt(
$ch
, CURLOPT_CUSTOMREQUEST,
"POST"
);
// POST
curl_setopt(
$ch
, CURLOPT_POSTFIELDS,
$raw_data
);
// Post Data
curl_setopt(
$ch
, CURLOPT_URL,
$url
);
//设置要访问的 URL
curl_setopt(
$ch
, CURLOPT_USERAGENT,
$user_agent
);
//模拟用户使用的浏览器
@curl_setopt(
$ch
, CURLOPT_FOLLOWLOCATION, 1 );
// 使用自动跳转
curl_setopt(
$ch
, CURLOPT_TIMEOUT, 60);
//设置超时时间
curl_setopt(
$ch
, CURLOPT_AUTOREFERER, 1 );
// 自动设置Referer
curl_setopt(
$ch
, CURLOPT_RETURNTRANSFER, 1);
// 收集结果而非直接展示
curl_setopt(
$ch
, CURLOPT_HTTPHEADER,
$headers
);
// 自定义 Headers
$result
= curl_exec(
$ch
);
curl_close(
$ch
);
return
$result
;
}
// $result = post($url, $headers, $raw_data);
|
示例
1
2
3
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
|
<?php
// @ini_set('display_errors', 1);
function
getAllHeaders
() {
$headers
= [];
foreach
(
$_SERVER
as
$name
=>
$value
) {
if
(
substr
(
$name
, 0, 5) ==
'HTTP_'
) {
$headers
[
str_replace
(
' '
,
'-'
, ucwords(
strtolower
(
str_replace
(
'_'
,
' '
,
substr
(
$name
, 5)))))] =
$value
;
}
}
return
$headers
;
}
$content
=
file_get_contents
(
'php://input'
);
$headers
=
getAllHeaders
();
$header_joins
= [];
foreach
(
$headers
as
$k
=>
$v
) {
if
(
$k
==
'X-Pingplusplus-Signature'
||
$k
==
'Content-Type'
)
array_push
(
$header_joins
,
$k
.
': '
.
$v
);
}
// print_r($header_joins);die();
function
post(
$url
,
$headers
,
$raw_data
) {
$ch
= curl_init();
curl_setopt(
$ch
, CURLOPT_CUSTOMREQUEST,
"POST"
);
// POST
curl_setopt(
$ch
, CURLOPT_POSTFIELDS,
$raw_data
);
// Post Data
curl_setopt(
$ch
, CURLOPT_URL,
$url
);
//设置要访问的 URL
curl_setopt(
$ch
, CURLOPT_USERAGENT,
$user_agent
);
//模拟用户使用的浏览器
@curl_setopt(
$ch
, CURLOPT_FOLLOWLOCATION, 1 );
// 使用自动跳转
curl_setopt(
$ch
, CURLOPT_TIMEOUT, 60);
//设置超时时间
curl_setopt(
$ch
, CURLOPT_AUTOREFERER, 1 );
// 自动设置Referer
curl_setopt(
$ch
, CURLOPT_RETURNTRANSFER, 1);
// 收集结果而非直接展示
curl_setopt(
$ch
, CURLOPT_HTTPHEADER,
$headers
);
// 自定义 Headers
$result
= curl_exec(
$ch
);
curl_close(
$ch
);
return
$result
;
}
$result
= post(
'http://rgjc6z4v2x.proxy.qqbrowser.cc/api/pingxx'
,
$header_joins
,
$content
);
echo
$result
;
|