对于限制了ip和来源的网站,使用正常的采集方式是不行的。这里说我的一种方法吧,使用php的curl类实现模拟ip和来源,可以实现采集限制ip和来源的网站。

1.设置页面限制ip和来源访问
比如服务端的server.php

  1. <?php
  2.  
  3. $client_ip = getip();
  4. $referer = getreferer();
  5.  
  6. $allow_ip = '192.168.0.100';
  7. $allow_referer = 'http://www.xxx.cn';
  8.  
  9. if($client_ip==$allow_ip && strpos($referer, $allow_referer)===0){
  10. echo 'allow access';
  11. }else{
  12. echo 'deny access';
  13. }
  14.  
  15. // 获取访问者ip
  16. function getip(){
  17. if(!empty($_SERVER['HTTP_CLIENT_IP'])){
  18. $cip = $_SERVER['HTTP_CLIENT_IP'];
  19. }elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
  20. $cip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  21. }elseif(!empty($_SERVER['REMOTE_ADDR'])){
  22. $cip = $_SERVER['REMOTE_ADDR'];
  23. }else{
  24. $cip = '';
  25. }
  26. return $cip;
  27. }
  28.  
  29. // 获取访问者来源
  30. function getreferer(){
  31. if(isset($_SERVER['HTTP_REFERER'])){
  32. return $_SERVER['HTTP_REFERER'];
  33. }
  34. return '';
  35. }
  36.  
  37. ?>

使用curl正常访问

  1. <?php
  2. function doCurl($url, $data=array(), $header=array(), $timeout=30){
  3.  
  4. $ch = curl_init();
  5. curl_setopt($ch, CURLOPT_URL, $url);
  6. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  7. curl_setopt($ch, CURLOPT_POST, true);
  8. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
  9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  10. curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  11.  
  12. $response = curl_exec($ch);
  13.  
  14. if($error=curl_error($ch)){
  15. die($error);
  16. }
  17.  
  18. curl_close($ch);
  19.  
  20. return $response;
  21.  
  22. }
  23.  
  24. // 调用
  25. $url = 'http://www.xxx.cn/server.php';
  26. $response = doCurl($url);
  27.  
  28. echo $response;
  29. ?>

使用curl模拟ip和来源进行访问

模拟来源

curl_setopt($ch, CURLOPT_REFERER, '来源');

模拟ip

curl_setopt($ch, CURLOPT_HTTPHEADER, array('CLIENT-IP: 模拟ip','X-FORWARDED-FOR: 模拟ip'));

完整代码如下:

  1. <?php
  2. function doCurl($url, $data=array(), $header=array(), $referer='', $timeout=30){
  3.  
  4. $ch = curl_init();
  5. curl_setopt($ch, CURLOPT_URL, $url);
  6. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  7. curl_setopt($ch, CURLOPT_POST, true);
  8. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
  9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  10. curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
  11.  
  12. // 模拟来源
  13. curl_setopt($ch, CURLOPT_REFERER, $referer);
  14.  
  15. $response = curl_exec($ch);
  16.  
  17. if($error=curl_error($ch)){
  18. die($error);
  19. }
  20.  
  21. curl_close($ch);
  22.  
  23. return $response;
  24.  
  25. }
  26.  
  27. // 调用
  28. $url = 'http://www.example.cn/server.php';//外部采集网站
  29. $data = array();
  30.  
  31. // 设置IP
  32. $header = array(
  33. 'CLIENT-IP: 192.168.0.100',
  34. 'X-FORWARDED-FOR: 192.168.0.100'
  35. );
  36.  
  37. // 设置来源
  38. $referer = 'http://www.xxx.cn/';
  39.  
  40. $response = doCurl($url, $data, $header, $referer, 5);
  41.  
  42. echo $response;
  43. ?>

 

curl模拟ip和来源进行网站采集的实现方法的更多相关文章

  1. 使用curl模拟ip和来源进行网站采集的实现方法

    对于限制了ip和来源的网站,使用正常的采集方式是不行的.本文将介绍一种方法,使用php的curl类实现模拟ip和来源,实现采集限制ip和来源的网站. 1.设置页面限制ip和来源访问 server.ph ...

  2. PHP curl模拟ip和来源进行访问

    PHP curl模拟ip和来源进行访问<pre> public function moniurlqingqiu() { $ch = curl_init(); $curlurl = &quo ...

  3. [PHP自动化-进阶]002.CURL模拟登录带有验证码的网站

    引言:继前文<模拟登录并采集数据>,大家似乎看不过瘾,这会再出一发,模拟实现带验证码网站的登录. 这篇文章主要介绍了PHP使用CURL实现对带有验证码的网站进行模拟登录的方法,可以帮助读者 ...

  4. PHP用curl伪造IP和来源

    以前没有这么搞过. 今天群里一个朋友在问这个问题. 查了下,CURL确实很强悍的可以伪造IP和来源. 1.php 请求 2.php . 1.php代码: $ch = curl_init(); curl ...

  5. [浪风推荐]CURL伪造IP和来源

    给“刷票”的朋友提供了很好的换IP的方案,查了下,CURL确实很强悍的可以伪造IP和来源. 1.php 请求 2.php . 1.php代码: $ch = curl_init(); curl_seto ...

  6. php使用curl模拟登录带验证码的网站[开发篇]

    需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下! <?php namespace Home\ ...

  7. php使用curl模拟登录带验证码的网站

    需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下! <?php namespace Home\ ...

  8. curl模拟自动登陆&采集网页数据

    <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content=&quo ...

  9. 【转】php curl 伪造IP来源的实例代码

    curl发出请求的文件fake_ip.php: 代码 复制代码 代码如下: <?php $ch = curl_init(); $url = "http://localhost/targ ...

随机推荐

  1. vue的学习之路

    一.vs code中,适合vue的前端插件 查看网址:http://blog.csdn.net/caijunfen/article/details/78749766 二.如何使用git从gitub上拉 ...

  2. android hal 诠释

    历史原因使Android系统有了HAL,它的角色相当于一个中间人,对上层,它负责给JNI提供调用kernel的方法,对下层,它所提供的方法包含能够访问kernel的函数,即kernel提供给上层的AP ...

  3. PHP中 PCRE正则表达式模式修饰符“u” 的使用。

    u (PCRE_UTF8) 此修正符打开一个与 perl 不兼容的附加功能. 模式字符串被认为是utf-8的. 这个修饰符 从 unix 版php 4.1.0 或更高,win32版 php 4.2.3 ...

  4. 我的C++ 学习心得

    创建这个博客已经是我大一下学期的暑假了,这一年里,我学习了人生第一门编程语言C++ . C++是一门当前仍然活跃于开发前沿的编程语言.在还未开始正式学习它时,早就听到我们的学长抱怨C++难学.起初,我 ...

  5. Dubbo 源码分析 - 集群容错之 Cluster

    1.简介 为了避免单点故障,现在的应用至少会部署在两台服务器上.对于一些负载比较高的服务,会部署更多台服务器.这样,同一环境下的服务提供者数量会大于1.对于服务消费者来说,同一环境下出现了多个服务提供 ...

  6. Python 爬虫修养-处理动态网页

    Python 爬虫修养-处理动态网页 本文转自:i春秋社区 0x01 前言 在进行爬虫开发的过程中,我们会遇到很多的棘手的问题,当然对于普通的问题比如 UA 等修改的问题,我们并不在讨论范围,既然要将 ...

  7. vue组件推荐

    Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基于Vue的UI组件框架开发,并投入正 ...

  8. 第50节:Java的当中的泛型

    Java当中的泛型 01 import java.util.ArrayList; import java.util.List; public class Demo{ public static voi ...

  9. postgresql 日常sql

    查看服务进程: select pid,usename,client_addr,client_port from pg_stat_activity;   查看当前数据库实例的版本:  select ve ...

  10. GitHub 近 100,000 程序员“起义”:向“996”开炮!

    作者 | 伍杏玲 出品 | 程序人生(ID:coder_life) 平常CSDN推送关于程序员加班的文章时,很多程序员边吐槽边调侃地留言“比拼”:“我们也是996”.“007来报道”…… 可在简单的数 ...