流程

  • 收集头部信息
  • 收集请求数据
  • 转换头部信息为 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;

使用 PHP Curl 做数据中转的更多相关文章

  1. php curl采集数据问题汇总

    1. 使用curl获取网页数据提示: "curl: (6) Could not resolve host: xxx.xxx.com ; Name or service not known&q ...

  2. 手把手教你用FineBI做数据可视化

    前些日子公司引进了帆软商业智能FineBI,在接受了简单的培训后,发现这款商业智能软件用作可视分析只用一个词形容的话,那就是“轻盈灵动”!界面简洁.操作流畅,几个步骤就可以创建分析,获得想要的效果.此 ...

  3. SharedPreferences介绍,用来做数据存储

    sharedPreferences是通过xml文件来做数据存储的. 一般用来存放一些标记性的数据,一些设置信息. *********使用sharedPreferences存储数据 public sta ...

  4. R语言入门系列1--数学狗还是做数据好了

    nanana,作为一个不合格的数学专业学生,脑袋不好使,又穷逼,只好学点儿实用的东西,希望能养活自己~~~ 不瞎哔哔,想做数据方面工作的时候在犹豫是学R还是学python,一点儿python基础都没有 ...

  5. curl提交数据时中文乱码

    1.使用curl提交数据时中文乱码解决: <?php $testJSON=array('name'=>'中文字符串','value'=>'test'); foreach ( $tes ...

  6. 在VS2012后的版本中做数据报表时,提示尚未指定报表“Report1”的报表定义

    有一群的朋友在用VS2012做数据报表时,老是提示 本地报表处理期间出错. 尚未指定报表“Report1”的报表定义 未将对象引用设置到对象的实例. 我看了一下,步骤没错,我用VS2010做了一下,一 ...

  7. hdu 4925 贪心 自己从小到大做数据找方法规律

    http://acm.hdu.edu.cn/showproblem.php?pid=4925 自己逐个做数据找规律.提供下我的找的: 1 2 1 3 2 2 2 3 3 3 然后发现这种矩阵是最优的: ...

  8. SharePoint自动化系列——通过PowerShell在SharePoint中批量做数据

    转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ PowerShell是基于.NET的一门脚本语言,对于SharePoint一些日常操作支持的很好. ...

  9. GAN作用——在我做安全的看来,就是做数据拟合、数据增强

    from:https://www.zhihu.com/question/56171002/answer/155777359 GAN的作用,也就是为什么GAN会火了(有部分原因可能是因为Lecun的赞赏 ...

随机推荐

  1. Oracle ORA-27102的解决办法(out of memory)

    原文出自:https://blog.csdn.net/seesun2012 Oracle ORA-27102:out of memory 错误解决办法(简单粗暴,100%能解决内存占用问题) -前置: ...

  2. C#继承中构造函数,成员变量的执行顺序

    public class Animal { static string baseClassName; protected string _skincolor; Instancevariable iv ...

  3. 通过winmm.dll控制声音播放

    介绍如何通过winmm.dll播放声音 首先导入两个函数 /// <summary> /// 向媒体控制接口发送控制命令 /// </summary> /// <para ...

  4. No mapping found for HTTP request with URI异常的原因,<mvc:default-servlet-handler/>的作用

    一.最近做的一个项目有很多静态资源文件,按照平时的配置springmvc进行配置发现访问不到静态文件,并且在我配置好controller去访问结果还是404 No mapping found for ...

  5. linux环境的基本搭建

    1.准备Linux环境(我的是centos系统) 如果你是hadoop用户在使用sudo之前需要配置一下:获取sudo权限 切换到root vi /etc/sudoersroot ALL=(ALL) ...

  6. Web开发:Bootstrap的应用

  7. 结构型--代理模式(Proxy)

    一.代理模式是什么? 代理模式属于GOF23设计模式中结构型中的设计模式,通过代理对象来屏蔽(部分或者屏蔽)对真实对象的直接访问,下图为UML图: 在代理模式中组件包括:抽象角色接口.代理角色类.真实 ...

  8. float、display和流

    一.css的元素有很深的道理和它存在的意义 块元素:默认元素的上下左右会有间隔(即使设置margin.padding为0也一样).如果想0间隔,考虑float. float:会使元素自动生成一个块级框 ...

  9. arcgis api for javascript - 最基本的地图加载

    为大家贴贴最基本的地图加载: 一. API 根据Dom树上节点的 ID 确定 Map 的显示位置; 二. setBasemap 方法可得到一些ArcGIS制作好的底图,例如: "street ...

  10. 错误的git reset操作之后的补救措施

    (相关命令:git reset.git log.git reflog,要看文档的话用--help.) 这是一次愚蠢的行为之后的总结……避免我之后忘记了解决方法[逃 get reset --hard是一 ...