关于我用PHP实现请求模拟的一件趣事!
下面由Laravel教程栏目给大家介绍关于实现PHP请求模拟的一件趣事,希望对大家有所帮助!
通过简单实现 PHP 请求模拟赚了 50 元
这个周末发生了一件有趣的事情:在群里看到有人需要做 PHP 开发的协助,并承诺有报酬,我自荐后解决了问题,获得了 50 元。
接下来我详细的说说整个事情的经过。
周六下班后打开了 QQ,在浏览群消息的时候看到这样一句话:“群里有没有会写 PHP 代码的,有偿”。我立马添加他的 QQ,并告诉他我是做 PHP 开发的,我可以提供帮助。
周日早上收到了他的回复,他给了我一个文档,让我看看是否能实现,我仔细浏览了整个文档,发现是第三方接口文档,我告诉他对接这种接口很简单,想知道他的具体业务是什么,而他告诉我只需要帮忙调通就行,以下是我们的对话截图:
php入门到就业线上直播课:进入学习
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API调试工具:点击使用
虽然他出的钱并不多,但是当时我恰好没有什么事情,就接了,我拷贝了之前写的代码,然后再改一下,很快就调通了,截图给他看,他确认没有问题后给我发了 50 元的红包,我也把文件发给他了,整个事情就结束了。
接下来我要说的是这个事情背后的技术问题。
首先他是懂 PHP 开发的,是在开发中遇到了难题,不知道是他懒得去搜索还是没有搜索到解决方案,而这个难题实际上就是一个 PHP 实现请求模拟的小问题。
现在我把整个文件代码分享出来,希望对遇到同样问题的人有一些帮助,实现代码:
<?php
class HttpClientUtil
{
public function sendRequest($type = '', $url = '', $data = [], $timeout = 60)
{
try {
$type = strtoupper($type);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);//设置请求链接
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//不直接输出页面
curl_setopt($curl, CURLOPT_HEADER, 0);//获取响应头向下
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout); //请求超时时间,单位:秒
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1');
if (substr($url, 0, 5) == 'https') { //自动判断是否是https提交
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
}
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type:application/json']);
switch ($type) {
case "GET" :
curl_setopt($curl, CURLOPT_HTTPGET, true);
break;
case "POST":
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
break;
case "PUT" :
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
break;
case "DELETE":
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
break;
}
$result = curl_exec($curl);
$err_code = curl_errno($curl);
$curlInfo = curl_getinfo($curl);
curl_close($curl);
if ($err_code) {
return false;
}
if ($curlInfo['http_code'] == 200) { //只有200状态才返回数据
return json_decode($result, true);
}
return false;
} catch (\Exception $e) {
throw new \Exception($e->getMessage());
}
}
public function createSign($data){
// 拼接
$dataStr = '';
foreach ($data as $key=>$value){
$dataStr.="{$key}={$value}&";
}
// 拼接商户密钥
$dataStr.='access_token=***B8';
// 加密
$sign =strtoupper(MD5($dataStr));
$data['sign']=$sign;
return $data;
}
}
$api = new HttpClientUtil();
$url = 'http://***/order/pay';
$data=[
'userName'=>'test',
'version'=>'2.0',
'cardName'=>'张三',
'cardNum'=>'20932402940189310293',
'openBank'=>'招商银行',
'amount'=>'10.00',
'outOrderId'=>'JD123123123',
'returnUrl'=>'/',
];
$res = $api->sendRequest('post',$url,$api->createSign($data));
print_r($res);
登录后复制推荐学习:《PHP视频教程》
相关阅读 更多
-
Connection reset是什么意思-Connection reset原因分析和解决方案 时间:2025-09-16
-
百度网盘不限速的方法(官方推荐) 时间:2025-09-16
-
Visual Studio Code下载和安装教程 怎么改成中文? 时间:2025-09-16
-
浏览器显示"您的连接不是私密连接"是什么意思?原因分析及解决方法 时间:2025-09-16
-
ChromeDriver下载地址在哪 ChromeDriver安装及配置教程 时间:2025-09-16
-
Python中syntaxerror:invalid syntax错误的原因及解决方法 时间:2025-09-16
今日更新
-
重返未来:1999翻覆之舟-翻覆之舟17怎么通关配队
阅读:18
-
时空中的绘旅人周年盛典-限时累充活动即将开启
阅读:18
-
无限暖暖9月下半奇迹之冠-后四关巅峰赛过关建议
阅读:18
-
以闪亮之名复刻追光活动-四星套装纪元余音预览开放
阅读:18
-
时空中的绘旅人全新卡面-叶瑄SSR·溯时契即将上线
阅读:18
-
逆水寒九灵怎么搭配-英雄团本木桩10.7W秒伤
阅读:18
-
替身甜妻梗解析:揭秘网络热词背后替身上位的爱情套路
阅读:18
-
如鸢月海夜航船精卫洱-精卫绿人鱼怎么打
阅读:18
-
王者荣耀2025KPL总决赛将在国家体育场鸟巢举行
阅读:18
-
重返未来:1999翻覆之舟-9月上半前两关打法
阅读:18