php中get_meta_tags()、CURL与user-agent信息对比

get_meta_tags()函数用于抓取网页中<meta name="A" content="1"><meta name="B" content="2">形式的标签,并装入一维数组,name为元素下标,content为元素值,上例中的标签可以获得数组:array('A'=>'1', 'b'=>'2')。其他<meta>标签不处理,并且此函数只处理到</head>标签时截止,之后的<meta>也不再继续处理,不过<head>之前的<meta>还是会处理。

user-agent是浏览器在向服务器请求网页时,提交的不可见的头信息的一部分。头信息是一个数组,包含多个信息,比如本地缓存目录,cookies等,其中user-agent是浏览器类型申明,比如IE、Chrome、FF等。

今天在抓取一个网页的<meta>标签的时候,总是得到空值,但是直接查看网页源代码又是正常的,于是怀疑是否服务器设置了根据头信息来判断输出。先尝试使用get_meta_tags()来抓取一个本地的文件,然后这个本地文件将获取的头信息写入文件,结果如下(其中替换成了/,方便查看):

 代码如下 复制代码

array (
  'HTTP_HOST' => '192.168.30.205',
  'PATH' => 'C:/Program Files/Common Files/NetSarang;C:/Program Files/NVIDIA Corporation/PhysX/Common;C:/Program Files/Common Files/Microsoft Shared/Windows Live;C:/Program Files/Intel/iCLS Client/;C:/Windows/system32;C:/Windows;C:/Windows/System32/Wbem;C:/Windows/System32/WindowsPowerShell/v1.0/;C:/Program Files/Intel/Intel(R) Management Engine Components/DAL;C:/Program Files/Intel/Intel(R) Management Engine Components/IPT;C:/Program Files/Intel/OpenCL SDK/2.0/bin/x86;C:/Program Files/Common Files/Thunder Network/KanKan/Codecs;C:/Program Files/QuickTime Alternative/QTSystem;C:/Program Files/Windows Live/Shared;C:/Program Files/QuickTime Alternative/QTSystem/; %JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;',
  'SystemRoot' => 'C:/Windows',
  'COMSPEC' => 'C:/Windows/system32/cmd.exe',
  'PATHEXT' => '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC',
  'WINDIR' => 'C:/Windows',
  'SERVER_SIGNATURE' => '',
  'SERVER_SOFTWARE' => 'Apache/2.2.11 (Win32) PHP/5.2.8',
  'SERVER_NAME' => '192.168.30.205',
  'SERVER_ADDR' => '192.168.30.205',
  'SERVER_PORT' => '80',
  'REMOTE_ADDR' => '192.168.30.205',
  'DOCUMENT_ROOT' => 'E:/wamp/www',
  'SERVER_ADMIN' => 'admin@admin.com',
  'SCRIPT_FILENAME' => 'E:/wamp/www/user-agent.php',
  'REMOTE_PORT' => '59479',
  'GATEWAY_INTERFACE' => 'CGI/1.1',
  'SERVER_PROTOCOL' => 'HTTP/1.0',
  'REQUEST_METHOD' => 'GET',
  'QUERY_STRING' => '',
  'REQUEST_URI' => '/user-agent.php',
  'SCRIPT_NAME' => '/user-agent.php',
  'PHP_SELF' => '/user-agent.php',
  'REQUEST_TIME' => 1400747529,
)

果然在数组中没有HTTP_USER_AGENT这个元素,apache在向另外一台服务器发送请求的时候是没有UA的。之后查了一下资料,get_meta_tags()函数没有伪造UA的能力,所以只能使用其他办法解决了。

后来使用CURL来获取,就获取到了网页,不过使用上稍微麻烦一点,首先伪造UA,获取之后在使用正则表达式分析<meta>
伪造办法:

 代码如下 复制代码

// 初始化一个 cURL
$curl = curl_init();

// 设置你需要抓取的URL
curl_setopt($curl, CURLOPT_URL, 'http://localhost/user-agent.php');

// 设置是否将文件头输出到浏览器,0不输出
curl_setopt($curl, CURLOPT_HEADER, 0);

// 设置UA,这里是将浏览器的UA转发到服务器,也可以手动指定值
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

// 设置cURL 参数,要求结果返回到字符串中还是输出到屏幕上。0输出屏幕并返回操作结果的BOOL值,1返回字符串
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

// 运行cURL,请求网页
$data = curl_exec($curl);

// 关闭URL请求
curl_close($curl);

// 处理获得的数据
var_dump($data);

时间: 2024-10-21 20:14:34

php中get_meta_tags()、CURL与user-agent信息对比的相关文章

php中get_meta_tags()、CURL与user-agent用法分析_php技巧

本文实例分析了php中get_meta_tags().CURL与user-agent用法.分享给大家供大家参考.具体分析如下: get_meta_tags()函数用于抓取网页中<meta name="A" content="1"><meta name="B" content="2">形式的标签,并装入一维数组,name为元素下标,content为元素值,上例中的标签可以获得数组:array('A'=&g

验证码-php中如何用curl模拟http头信息进行模拟登陆并获取信息

问题描述 php中如何用curl模拟http头信息进行模拟登陆并获取信息 最好有带 验证码的,不一定要curl 其他也行 不过需要模拟http 信息 这个问题我一直都不太懂 能有个经典的例子参考下吗 解决方案 http://www.helloweba.com/view-blog-253.html 解决方案二: php curl模拟登陆PHP使用curl模拟登陆php使用curl模拟用户登陆

php中的curl使用入门教程和常见用法实例

[目录] php中的curl使用入门教程和常见用法实例 一.curl的优势 二.curl的简单使用步骤 三.错误处理 四.获取curl请求的具体信息 五.使用curl发送post请求 六.文件上传 七.文件下载 八.http 验证 九.通过代理发送请求 十.发送json数据 十一.cURL批处理(multi cURL) 十二.总结 起先cURL是做为一种命令行工具设计出来的,比较幸运的是,php也支持cURL了.通过cURL这个利器,我们能在php程序中自由地发送 HTTP请求到某个url来获取

在PHP中使用curl

复制代码 代码如下: $ch = curl_init(); $c_url = 'http://www.baidu.com'; $c_url_data = "product_&type=".$type.""; curl_setopt($ch, CURLOPT_URL,$c_url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_s

PHP中使用CURL模拟登录并获取数据实例_php实例

cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信息.本文以模拟登录开源中国(oschina)为例,和大家分享cURL的使用. PHP的curl()在抓取网页的效率方面是比较高的,而且支持多线程,而file_get_contents()效率就要稍低些,当然,使用curl时需要开启下curl扩展. 代码实战 先来看登录部分的代码: 复制代码 代码如下

php中的curl使用入门教程和常见用法实例_php实例

一.curl的优势 你也许会说,在php中可以很容易的获取某个url的内容,只要通过file_get_contents,file或者readfile函数就能轻松实现,根本不必使用cURL: 复制代码 代码如下:         $content = file_get_contents("http://www.360weboy.com");        $lines = file("http://www.360weboy.com");        readfile

在PHP中使用CURL,“撩”服务器只需几行——php curl详细解析和常见大坑

作为开发,妹子没得撩就"撩"下服务器吧,妹子有得撩的同学那就左拥妹子右抱服务器吧,况且妹子是要礼物的,服务器又不用.好啦,长话短说再长说,祭出今天的工具--CURL(Client URL Library),当然今天以PHP的方式来使用这件工具. 0. curl是个什么东西 PHP supports libcurl, a library created by Daniel Stenberg, that allows you to connect and communicate to ma

在Elasticsearch中查询Term Vectors词条向量信息

这篇文章有点深度,可能需要一些Lucene或者全文检索的背景.由于我也很久没有看过Lucene了,有些地方理解的不对还请多多指正. 更多内容还请参考整理的ELK教程 关于Term Vectors 额,对于这个专业词汇,暂且就叫做词条向量吧,因为实在想不出什么标准的翻译.说的土一点,也可以理解为关于词的一些统计信息.再说的通俗点,如果想进行全文检索,即从一个词搜索与它相关的文档,总得有个什么记录的信息吧!这就是Term Vectors. 为了不干扰正常的理解,后续就都直接称呼英文的名字吧!免得误导

Hadoop中使用FileStatus类来查看HDFS中文件或目录的元信息

Hadoop中的FileStatus类可以用来查看HDFS中文件或者目录的元信息,任意的文件或者目录都可以拿到对应的FileStatus, 我们这里简单的演示下这个类的相关API: /* */ package com.charles.hadoop.fs; import java.net.URI; import java.sql.Timestamp; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.F

领域建模中的七种坏味道信息

领域建模(见侧边栏)作为一项强大的技术,常备于很多IT专业人士的工具箱之中.令人遗憾的是,在过 去的几年间,因为领域建模的几个问题导致人们对其大失所望,尤其是在敏捷领域.这种方式的两个切实存在 的问题就是:它会消耗太长的时间并且很易于导致"分析瘫痪(analysis paralysis"),而这会导致停滞( "spinning wheels").我们为领域建模提供了一种方式,可以用来解决这些问题. 我们会讨论领域 模型中的一些信号,这些信号会告诉你要提出更多的问题.