使用 PHP Curl 做数据中转

流程

  • 收集头部信息
  • 收集请求数据
  • 转换头部信息为 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 ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值