使用 PHP Curl 做數據中轉

使用 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;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,915評論 18 139
  • 轉載自:http://www.cnblogs.com/txw1958/archive/2013/01/19/286...
    php_bruce閱讀 2,304評論 1 5
  • 一、什么是CURL? cURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多協議,如HTTP、FTP、...
    茶藝瑤閱讀 4,637評論 0 6
  • 一、什么是CURL? cURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多協議,如HTTP、FTP、...
    伊Summer閱讀 1,317評論 0 4
  • CURLOPT_RETURNTRANSFER 選項:curl_setopt($ch, CURLOPT_RETURN...
    Talentisan閱讀 16,918評論 0 2