背景:
之前用过芝麻IP
,写过这几篇文章
《【Python】芝麻HTTP代理系列保姆级全套攻略(对接教程+自动领取每日IP+IP最优算法)》
《【Python】记录抓包分析自动领取芝麻HTTP每日免费IP(成品+教程)》
《爬虫增加代理池:使用稳定第三方芝麻代理IP 教程(详细可用)》
后面的项目都用他家的代理是因为,每天都有免费额度,不知不觉
薅羊毛275天
了,而且上次使用还不能生成代码,提交了建议后没想到真的实现了
目录:
设计思路:
用户通过小程序访问孔夫子的图书详情接口,访问前通过检查redis判断是否有代理IP,没有则生成并记录去redis,有则直接使用,因为接口使用不会存在长时间连接的情况,基本都是一次性访问,所以,本次方案行得通。
通过购买代理次数包,每次提取一个代理供接口调用使用,因为用户使用时段不一样,做到能最大限度节约成本,一个IP在有效时间内供多人使用,可以看下他们的价目表,开发可以先使用
体验套餐
这里由于没有额度了,我先开通套餐
获取代理接口
1、通过配置参数获取接口
2、通过curl获得php访问代码
// 初始化 cURL
$ch =curl_init();// 设置 cURL 参数curl_setopt($ch, CURLOPT_URL,"http://**********s=");curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);// 发送请求并获取响应
$response =curl_exec($ch);// 关闭 cURLcurl_close($ch);
$data =json_decode(trim($response),true);
3、通过访问观察下返回情况
有ip、端口、以及过期时间
{"code":0,"data":[{"ip":"111.76.65.216","port":4278,"expire_time":"2023-06-16 16:46:05"}],"msg":"0","success":true}
封装IP检测模块
在控制器中,新建zhimahttp方法
如果redis没有该记录则重新获取IP,具体可以看流程图👇
过期时间换算
获取到过期时间后,通过计算现在与目标过期的时间,确定存储倒计时
// 获取当前时间戳
$now =time();// 将时间字符串转换为时间戳
$target =strtotime($expireTime);// 计算时间差
$diff = $target - $now;// 存入redis
$redis->set($proxy_name,$proxyServer,$diff);
最后,完整封装代码如下:
// 芝麻ip代理配置public function zhimahttp(){
$proxy_name="proxy_ip";//定义存储名
$redis =newRedis();//查询redis是否有记录
$re= $redis->get("$proxy_name");if($re){// 存在记录使用即可return"$re";die();}else{//不存在记录,从芝麻ip获取并存储// 初始化 cURL
$ch =curl_init();// 设置 cURL 参数curl_setopt($ch, CURLOPT_URL,"htt**********ns=");curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);// 发送请求并获取响应
$response =curl_exec($ch);// 关闭 cURLcurl_close($ch);
$data =json_decode(trim($response),true);// 判断code的值if($data['code']==0){// 解析ip、port、expire_time
$ip = $data['data'][0]['ip'];
$port = $data['data'][0]['port'];
$expireTime = $data['data'][0]['expire_time'];// 输出解析结果// echo "IP: $ip\n";// echo "Port: $port\n";// echo "expireTime: $expireTime\n";
$proxyServer = 'http://' . $ip.':'.$port;// echo "$proxyServer";// 获取当前时间戳
$now =time();// 将时间字符串转换为时间戳
$target =strtotime($expireTime);// 计算时间差
$diff = $target - $now;// 存入redis
$redis->set($proxy_name,$proxyServer,$diff);return $proxyServer;}else{// exit('ip 不正确');die(json_encode(array('code'=>100,'data'=>'','msg'=>'ip 不正确'),480));}}}
调用检测模块:
上面的代码中,我们已经在控制器中封装了方法,如何使用呢?
在tp5中调用方法即可,调用方法:
//代理ip
$proxyServer =$this->zhimahttp();//代理ip
结合我的业务代码,在访问接口前进行调用检查即可,接下来是一个示例:
//调用代理ip检查
$proxyServer =$this->zhimahttp();
$ch =curl_init();curl_setopt($ch, CURLOPT_URL, 'https://app.kongfz.com/invokeSearch/app/product/productSearchV2');curl_setopt($ch, CURLOPT_POST,true);curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);curl_setopt($ch, CURLOPT_PROXY, $proxyServer);
$response =curl_exec($ch);curl_close($ch);
注意:
curl_setopt($ch, CURLOPT_PROXY, $proxyServer);
记得在上面加上,不然代理ip没用上
接口测试
访问一次目标接口,由于第一次redis中没有记录,所以会存入名为proxy_ip的数据
再次访问(记录没有过期),由于记录存在所以就直接返回代理ip了,测试了下小程序接口可以正常使用
最后
喜欢爬虫类文章的可以订阅我专栏哦
⭐⭐欢迎订阅⭐⭐ ⭐⭐欢迎订阅⭐⭐
🚀Python爬虫项目实战系列文章!!
⭐⭐欢迎订阅⭐⭐ ⭐⭐欢迎订阅⭐⭐
🚀Python爬虫项目实战系列文章!!
⭐⭐往期文章⭐⭐
【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认证)
【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口
⭐⭐往期文章⭐⭐
版权归原作者 德宏大魔王(自动化助手) 所有, 如有侵权,请联系我们删除。