流程

  • 收集头部信息
  • 收集请求数据
  • 转换头部信息为 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. [转]asp.net5中使用NLog进行日志记录

    本文转自:http://www.cnblogs.com/sguozeng/articles/4861303.html asp.net5中使用NLog进行日志记录 asp.net5中提供了性能强大的日志 ...

  2. 另一个C#模拟post请求的例子

    private string returninstallTmnl(AddTmnlInstallParameter model) { string url = ConfigurationSettings ...

  3. C++测验代码

    /* 返回字符串前n位和返回整数前n位 */ #include <iostream> unsigned long left(unsigned long num, int n); char ...

  4. javascript预编译和执行过程总结

    javascript相对于其它语言来说是一种弱类型的语言,在其它如java语言中,程序的执行需要有编译的阶段,而在javascript中也有类似的“预编译阶段”(javascript的预编译是以代码块 ...

  5. Struts2 学习(三)

    一.访问Servlet API 的三种方式 1.什么是 Action 访问 Servlet 的 API 1.访问 Servlet 的API: 1.获取 request 对象. 2.接受请求参数. 3. ...

  6. Redis实现主从复制(Master&Slave)

    由于前段时间公司项目比较赶,一直抽不出时间写博客,今天偷空写一篇吧.前面给大家讲解了单机版redis的基本操作,现在继续给大家讲解一下Redis的进阶部分,主从复制和读写分离. 一.Master&am ...

  7. What is the relation of theme and it's derived theme.

    You know, a theme can derive from other theme in two ways: xx.xxx implicit way and parent="xxx& ...

  8. 软件项目技术点(1)——Tween算法及缓动效果

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 Tween算法及缓动效果 软件里在切换步序时需要有过渡动画效果,从当前位置的画面缓动到目标位置的画面.动画效果可重新查看文章系列第一篇 ...

  9. 安卓app应用开发资料

    android 配置文件画图 http://blog.csdn.net/loongggdroid/article/details/46687589 android下拉刷新控件 https://gith ...

  10. System.Net.Mail 邮件发送示例

    前言:OA自动发送邮件的程序不好使,SQL Server 存储过程邮件发送程序好使,但是不利于标准化和维护,于是觉得是适合找些“轮子”武装一下.想起之前学习过System.Net.Mail ,于是再次 ...