只要把最后一个参数删除即可,本文实例讲述了

2019-07-13 作者:编程   |   浏览(67)

一直想写这个,过了很久今天兴趣来了索性记录下。

本文实例讲述了PHP检测用户是否关闭浏览器的方法。分享给大家供大家参考,具体如下:

这次抓取了110万的用户数据,数据分析结果如下:

PHP7扩展编写的时候,提供的一些内核方法和之前的PHP之前的版本并不能完全兼容。有不少方法参数做了调整。下面是在迁移过程中遇到的一些问题。记录下来,避免大家再踩坑。

验证码

1、例子1

图片 1

add_assoc_stringl

全自动区分计算机和人类的公开图灵测试(英语:Completely Automated Public Turing test to tell Computers and Humans Apart,简称CAPTCHA),俗称验证码,是一种区分用户是计算机和人的公共全自动程序。在CAPTCHA测试中,作为服务器的计算机会自动生成一个问题由用户来解答。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,所以回答出问题的用户就可以被认为是人类。
百科介绍

echo str_repeat(" ",3000);
ignore_user_abort(true); 
mylog('online');
while (true) {
   /*
   * 1、程序正常结束   connection_status 0
   * 2、点击浏览器“停止”按钮   connection_status 1
   * 3、超时  connection_status 2
   */
 echo "test<br>n"; //注意程序一定要有输出,否则ABORTED状态是检测不到的
 flush();
 sleep(1);
 if (connection_status()!=0){
    mylog('offline');
    die('end the script');
 }
}
function mylog($str)
{
   $fp = fopen('e:/abort.txt', 'a');
   $str = date('Y-m-d H:i:s').$str."rn";
   fwrite($fp, $str);
   fclose($fp);
}

开发前的准备

方法参数改为四个。

说的简单点就是随机生成的字符,输出在一张图片上[这里不考虑其他形式的拖拽/短信验证码等等]。

2.例子2

  • 安装Linux系统(Ubuntu14.04),在VMWare虚拟机下安装一个Ubuntu;
  • 安装PHP5.6或以上版本;
  • 安装MySQL5.5或以上版本;
  • 安装curl、pcntl扩展。

add_assoc_stringl(parray, key, value, value_len);

常见类型

function foo() {
 $s = 'connection_status '. connection_status();
 mylog($s);
} 
register_shutdown_function('foo');//script processing is complete or when exit() is called
set_time_limit(10);
for($i=0; $i<10000000; $i  )
 echo $i;
function mylog($str)
{
  $fp = fopen('e:/abort.txt', 'a');
  $str = date('Y-m-d H:i:s').$str."rn";
  fwrite($fp, $str);
  fclose($fp);
}

使用PHP的curl扩展抓取页面数据

迁移的时候,只要把最后一个参数删除即可。

图片 2

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基本语法入门教程》、《PHP错误与异常处理方法总结》及《php常用函数与技巧总结》

PHP的curl扩展是PHP支持的允许你与各种服务器使用各种类型的协议进行连接和通信的库。

add_assoc_string

思路

希望本文所述对大家PHP程序设计有所帮助。

本程序是抓取知乎的用户数据,要能访问用户个人页面,需要用户登录后的才能访问。当我们在浏览器的页面中点击一个用户头像链接进入用户个人中心页面的时候,之所以能够看到用户的信息,是因为在点击链接的时候,浏览器帮你将本地的cookie带上一齐提交到新的页面,所以你就能进入到用户的个人中心页面。因此实现访问个人页面之前需要先获得用户的cookie信息,然后在每次curl请求的时候带上cookie信息。在获取cookie信息方面,我是用了自己的cookie,在页面中可以看到自己的cookie信息:

方法参数从四个改为了三个。

本文只做演示使用,故取第一张图片验证码作为讲解示例。

您可能感兴趣的文章:

  • php检测用户是否用手机(Mobile)访问网站的类
  • phpsir 开发 一个检测百度关键字网站排名的python 程序
  • PHP检测链接是否存在的代码实例分享
  • PHP Ajax实时自动检测是否联网的方法
  • php检测url是否存在的方法
  • php实现TCP端口检测的方法
  • php在linux下检测mysql同步状态的方法
  • PHP实现批量检测网站是否能够正常打开的方法

图片 3

add_assoc_stringl(parray, key, value);

图片 4

一个个地复制,以”__utma=?;__utmb=?;”这样的形式组成一个cookie字符串。接下来就可以使用该cookie字符串来发送请求。

迁移的时候,只要把最后一个参数删除即可。

图片上的每一点都有其RGB值,通过取色器可以获取到,肉眼观察可以看出该图验证码是纯数字纯色背景

初始的示例:

add_next_index_stringl

图片 5

$url = 'http://www.zhihu.com/people/mora-hu/about'; //此处mora-hu代表用户ID
$ch = curl_init($url); //初始化会话
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIE, $this->config_arr['user_cookie']); //设置请求COOKIE
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
$result = curl_exec($ch);
return $result; //抓取的结果

方法参数从四个改为了三个。

通过取色器看出该验证码背景色RGB值为(212,214,204)

运行上面的代码可以获得mora-hu用户的个人中心页面。利用该结果再使用正则表达式对页面进行处理,就能获取到姓名,性别等所需要抓取的信息。

add_next_index_stringl(parray, value, value_len);

实现

1、图片防盗链

迁移的时候,只要把最后一个参数删除即可。

下面我们来用PHP的imagecolorsforindex函数取得图片所有点的RGB值:

在对返回结果进行正则处理后输出个人信息的时候,发现在页面中输出用户头像时无法打开。经过查阅资料得知,是因为知乎对图片做了防盗链处理。解决方案就是请求图片的时候在请求头里伪造一个referer。

add_next_index_string

$url = 'http://210.32.33.91:8080/reader/captcha.php';
$im = imagecreatefromgif($url);
imagegif($im, '1.gif');
$rgbArray = array();
$res = $im;
$size = getimagesize($url);

$wid = $size['0'];
$hid = $size['1'];
for ($i = 0; $i < $hid;    $i) {
 for ($j = 0; $j < $wid;    $j) {
  $rgb = imagecolorat($res, $j, $i);
  $rgbArray[$i][$j] = imagecolorsforindex($res, $rgb);
 }
}

在使用正则表达式获取到图片的链接之后,再发一次请求,这时候带上图片请求的来源,说明该请求来自知乎网站的转发。具体例子如下:

方法参数从三个改为了两个。

结果如下:

function getImg($url, $u_id)
{
  if (file_exists('./images/' . $u_id . ".jpg"))
  {
    return "images/$u_id" . '.jpg';
  }
  if (empty($url))
  {
    return '';
  }
  $context_options = array( 
    'http' => 
    array(
      'header' => "Referer:http://www.zhihu.com"//带上referer参数
    )
  );

  $context = stream_context_create($context_options); 
  $img = file_get_contents('http:' . $url, FALSE, $context);
  file_put_contents('./images/' . $u_id . ".jpg", $img);
  return "images/$u_id" . '.jpg';
}

add_next_index_string(parray, value);

图片 6

2、爬取更多用户

迁移的时候,只要把最后一个参数删除即可。

本文由小鱼儿玄机30码发布于编程,转载请注明出处:只要把最后一个参数删除即可,本文实例讲述了

关键词: 小鱼儿玄机30码

  • 上一篇:没有了
  • 下一篇:没有了
编程推荐