使用 PHP Curl 做數據中轉
流程
- 收集頭部信息
- 收集請求數據
- 轉換頭部信息為 CURL 頭部請求格式
- 使用 Curl 進行轉發
收集 HTTP 頭信息
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 封裝協議獲取輸入數據
$content = file_get_contents('php://input')
轉換頭信息為 Curl 請求格式
$headers = getAllHeaders();
$header_joins = [];
foreach ($headers as $k => $v) {
if ($k == 'X-Pingplusplus-Signature' || $k == 'Content-Type')
array_push($header_joins, $k . ': ' . $v);
}
使用 Curl 進行轉發
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);
示例
<?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;