使用 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);

示例

// @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中转,使用 PHP Curl 做数据中转相关推荐

  1. 建立数据中转服务器的详细方法

    随着互联网应用的飞速发展,互联网给人们的生活带来了极大的便利.然而互联网暗藏的风险也如悬在头顶的利剑,随时可能带来致命的伤害.因此,即便是今天,依然有许多涉密单位和网络,既存在与互联网交换数据的实际需 ...

  2. 某APP安全检测 (360脱壳+算法分析+数据中转注入)

    https://www.t00ls.net/articles-45803.html 最近对某一APP进行安全检测,整个过程花费几天时间,最耗时的就是写中转脚本实现数据的自动加密解密过程,而且过程中遇到 ...

  3. 你的报表工具会做数据准备吗 ——报表开发中的深层次问题

    前言 现在企业的报表开发大部分都使用报表工具完成,成熟的报表工具提供了丰富的显示设置.图表类型.导出打印等功能可以简化报表开发,非常方便.但在实际报表开发中还是经常碰到一些非常棘手的深层次问题,即使是 ...

  4. 如何用curl做PUT请求?

    本文翻译自:How to do a PUT request with curl? 如何使用curl测试RESTful PUT(或DELETE)方法? #1楼 参考:https://stackoom.c ...

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

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

  6. python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  7. python与excel做数据可视化-python做可视化数据分析,究竟怎么样?

    Python做可视化数据分析也是可以的,只是对比起来专业的可视化工具有些得不应手,做出来的图可能不太美观.Python用来处理数据,用来分析绝对可以.我觉得想要可视化可以使用专门的可视化工具. 不过, ...

  8. mysql errno : 1146_MySQL_MySQL复制出错 Last_SQL_Errno:1146的解决方法,背景:我们在做数据迁移或者 - phpStudy...

    MySQL复制出错 Last_SQL_Errno:1146的解决方法 背景:我们在做数据迁移或者拆分的时候,使用Tablespace transcation 这种解决方案时,很有可能就会遇到 从库复制 ...

  9. echarts迁徙图 vue_vue中高德搭配echarts做数据迁徙流线图

    前言 此系列共分为以下几篇 <vue中高德地图的使用> <vue中基于高德的多行政区域覆盖> <vue中高德搭配echarts做数据迁徙流线图> (本篇) 本篇效果 ...

最新文章

  1. cpu满了卡住 linux_Linux系统中CPU占用率较高问题排查思路与解决方法
  2. mybatis insert 返回主键_面试准备季——MyBatis 面试专题(含答案)
  3. [MATLAB粒子模拟]Energy Vx(X) Vy(X) Vz(X)
  4. 可迭代协议与for-of循环
  5. ubuntu下安装minicom
  6. php fsockopen socket,PHP利用socket(fsockopen)的简单示例
  7. 面向对象:类的定义和使用
  8. django mysql数据同步_[django同步数据库]Django去操作已经存在数据的数据库
  9. PAT乙级(1033 旧键盘打字)
  10. texstudio自动拼写检测_飞桨PaddleDetection物体检测统一框架详解
  11. C语言库函数的哈希表使用方法
  12. linux 配置软件安装源
  13. JAVA操作docx文档
  14. 贴片电阻常见的规格封装和尺寸
  15. 填坑Ⅰ | 简单的数据结构
  16. 数据脱敏 Data Masking
  17. 关于RPC框架封装时ThreadPool的选型和设计
  18. 基于hadoop下的使用map reduce分布式系统的高考高频词汇统计
  19. Matlab 绘制双纵轴图
  20. C++ Primer Plus 编程练习3

热门文章

  1. 学习笔记 mysql_MySQL 学习笔记
  2. vba mysql odbc_使用VBA+ODBC+MySQL实现Excel网络版
  3. linux文件系统叫什么,【整理】什么是根文件系统(rootfs=Root Fils System)
  4. YYDS 的 IDEA插件,没装上的安排起来!
  5. 在人脸识别的时候,一定要穿上衣服啊!
  6. 蚂蚁金服面试3+2次,最终有惊无险通过!
  7. 如何避免死锁,我们有什么套路可循?
  8. 来自95后的天池中间件大赛总结
  9. mysql workbench pdm_MySQL Workbench
  10. mysql-索引-笔记