本站停止维护,已转移至laravel学习网;欢迎大家移步访问!

laravel guzzle爬虫实战 --高级篇 ( Guzzle下载远程图片以及解决网站验证码完成模拟登录 )

在前面的文章中,我们已经了解了guzzle的基本用法以及完成了不需要验证码的网站的登录:laravel guzzle爬虫实战 --进击篇(使用cookies实现模拟登录)今天我们要搞事情,搞定需要验证码的登录,以及了解使用guzzle怎么去下载一张远程图片,视频,语音达到我们无数的小需求:

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
$file = time().".jpg";  // 保存后的名称,可以加路径
$url = "https://www.songshubank.com/pcrimg"; // 图片地址
$client = new Client(['verify' => false]);  //忽略SSL错误,可以不加
$response = $client->get($url, ['save_to' => public_path($file)]);  //保存远程url到文件

好的,我们这样就可以随意的下载我们需要的资源了,ok到这里我们开始来介绍怎么去来搞定验证码然后登陆网址

<?php
namespace App\Services;
use GuzzleHttp\Client;

class PlateformJinrongService
{
	public static function testlogin($usename,$password)
	{
		// 获取并且验证验证码
		$file = time().".jpg";
		// 网站登陆地址,注意是提交的那个地址
		$hosturl = "";
		// 验证码地址
		$url = "";
		// 每次访问都带上cookie
		$client = new Client(['cookies' => true]); 
		//保存远程url到文件
		$response = $client->get($url, ['save_to' => public_path($file)]);
		// 注意,这里是去封装的一个通过验证码图片直接获取验证码的类
		$code = VerificationCodeService::getVerificationLocalCode($file);
		// 登陆网站
		try{ 
			$response = $client->request("POST", $hosturl, [
			    'form_params' => [
			    	'usename'  => '',
			    	'password' => ''
			    ]
			]);
			// 获取登陆后显示的页面
			$body = $response->getBody();
			// 输出登陆后的页面
			echo $body;
		}
		catch(Exception $e)
 		{
 			return array('status'=>'error','msg'=>"端口异常");
 		}
	}
}

好的,我们来解释一下代码:

  1. 1.new Client(['cookies' => true]); 其实就是要记录我们的登陆cookie,为什么要定义在前面呢?因为其实我们每次更换验证码是不断的更新cookie,不加上的话验证不成功;
  2. 2.大家看到我会下载验证码,然后传给解码类去解码,为什么呢?很简单,因为我们要固定的图片去定格这一秒,然后获取到验证码再去请求,不然验证码变得,我们的操作白做了
  3. 3.怎么解除验证码?其实很多打码平台都有接口文档,解除验证码很便宜,1块钱都能解除上千次,准确率高达99%;有需要我可以贴出代码来

好的,我们就到这里了,有问题可以在下面留言或者进去问我,一定要注意异常处理,毕竟这个有很多时候会出错的 转载请注明 :一沙网络原文出处:http://bbs.earnp.com/article/253
问题交流群 :562864481
2
打赏
发布时间 :2016-11-26 18:19:37
分享

2 个评论

    还没有评论,感觉来抢沙发吧!

要回复文章请先登录注册