
php curl抓取网页
php curl抓取网页(fopentoopenstream:HTTPrequestfailed!错误,解决方法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 78 次浏览 • 2022-03-06 20:00
1、fopen 的使用
代码显示如下:
代码显示如下:
// 以下代码可用于 PHP 5 及以上版本
但是上面的代码很容易出现开流失败:HTTP request failed!错误,解决方法
有人说在php.ini中有两个选项:allow_url_fopen =on(表示可以通过url打开远程文件),user_agent="PHP"(表示使用哪个脚本访问网络,还有一个" ;" 默认在它前面。是的。)重新启动服务器。
但是,有些仍然有此警告信息,距离完美解决方案还有一步之遥。您必须在 php.ini 中设置 user_agent。php默认的user_agent是PHP,我们改成Mozilla/4.0(兼容Mozilla/4.0)。; MSIE 6.0; Windows NT 5.0) 模拟浏览器
<IMG src="http://files.jb51.net/upload/2 ... ot%3B border=0>
user_agent="Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)"
工作中遇到这个问题,完美解决了,分享给大家。
2、由 curl 实现
代码显示如下:
linux下,可以使用以下代码下载
exec("wget {$url}");
PHP抓取外部资源函数fopen/file_get_contents/curl的区别
fopen/file_get_contents 会为每个请求重新做 DNS 查询,并且不缓存 DNS 信息。
但是 CURL 会自动缓存 DNS 信息。对同一域名下的网页或图片的请求只需要一次 DNS 查询。
这大大减少了 DNS 查询的数量。
所以 CURL 的性能比 fopen/file_get_contents 好很多。
脚本之家原创的内容,转载请注明出处。推荐内容:免费高清PNG素材下载 查看全部
php curl抓取网页(fopentoopenstream:HTTPrequestfailed!错误,解决方法)
1、fopen 的使用
代码显示如下:
代码显示如下:
// 以下代码可用于 PHP 5 及以上版本
但是上面的代码很容易出现开流失败:HTTP request failed!错误,解决方法
有人说在php.ini中有两个选项:allow_url_fopen =on(表示可以通过url打开远程文件),user_agent="PHP"(表示使用哪个脚本访问网络,还有一个" ;" 默认在它前面。是的。)重新启动服务器。
但是,有些仍然有此警告信息,距离完美解决方案还有一步之遥。您必须在 php.ini 中设置 user_agent。php默认的user_agent是PHP,我们改成Mozilla/4.0(兼容Mozilla/4.0)。; MSIE 6.0; Windows NT 5.0) 模拟浏览器
<IMG src="http://files.jb51.net/upload/2 ... ot%3B border=0>
user_agent="Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)"
工作中遇到这个问题,完美解决了,分享给大家。
2、由 curl 实现
代码显示如下:
linux下,可以使用以下代码下载
exec("wget {$url}");
PHP抓取外部资源函数fopen/file_get_contents/curl的区别
fopen/file_get_contents 会为每个请求重新做 DNS 查询,并且不缓存 DNS 信息。
但是 CURL 会自动缓存 DNS 信息。对同一域名下的网页或图片的请求只需要一次 DNS 查询。
这大大减少了 DNS 查询的数量。
所以 CURL 的性能比 fopen/file_get_contents 好很多。
脚本之家原创的内容,转载请注明出处。推荐内容:免费高清PNG素材下载
php curl抓取网页(利用和报告子域错误配置创建一个总体指南(组图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 79 次浏览 • 2022-01-20 16:03
HackerOne 的 Hacktivity 提要 - 公开披露报告的精选提要 - 看到了相当一部分关于子域收购的报告。自从 Detectify 关于子域接管的优秀系列 文章 以来,漏洞赏金行业一直在迅速收到有关此类问题的报告。
子域接管的基本前提是主机指向当前未使用的特定服务,攻击者可以通过在第三方服务上建立帐户来使用该服务在易受攻击的子域上提供内容。作为一名黑客和安全分析师,我每天都在处理这类问题。
我今天的目标是为理解、查找、利用和报告子域错误配置创建一个通用指南。本文假设读者对域名系统 (DNS) 有基本的了解,并且知道如何设置子域。
子域接管简介
如果您以前从未执行过子域接管,或者想要新的介绍,我设计了一个示例场景来帮助您解释基础知识。对于这种情况,我们假设
是目标,并且运行团队有一个错误赏金计划。在枚举属于所有子域时,我们偶然发现
在此过程中,黑客偶然发现了一个指向 GitHub Pages 的子域。我们可以通过查看子域的 DNS 记录来确定这一点;在这个例子中,有多个 A 记录指向 GitHub 自定义页面的私有 IP 地址。
$ host subdomain.example.comsubdomain.example.com has address 192.30.252.153subdomain.example.com has address 192.30.252.154$ whois 192.30.252.153 | grep "OrgName"OrgName: GitHub, Inc.
去的时候,发现如下404错误页面。
在这一点上,大多数黑客的头脑都开始麻木了。这个 404 页面表明顶级目录下没有可用的内容,我们应该尝试将此子域添加到我们的个人 GitHub 存储库。请注意,这并不意味着可以在所有应用程序上进行接管。某些应用程序类型要求您检查 HTTP 和 HTTPS 响应以进行接管,而其他应用程序类型可能根本没有漏洞。
将自定义子域添加到我们的 GitHub 项目后,我们可以看到存储库的内容已被提供——我们已经成功声明了子域。出于演示目的,索引页面现在显示青蛙的图片。
二阶子域接管
二阶子域接管,我想称之为“断开链接劫持”,是易受攻击的子域,不一定属于目标,但用于在目标 网站 上提供内容。
这意味着,例如,资源是通过 JavaScript 块导入到目标页面上的,黑客可以声明要从中导入资源的子域。劫持在页面某处使用的主机最终会导致存储跨站点脚本,因为攻击者可以在目标页面上加载任意客户端代码。
我想在本指南中列出这个问题的原因是为了强调一个事实,作为一名黑客,我不想将自己限制在目标主机上的子域中。您可以通过检查源代码并映射目标所依赖的所有主机来轻松扩展范围。
这也是为什么如果您要劫持子域,值得花时间查看是否有任何页面从子域导入资产。
子域枚举和发现
既然我们对在配置错误的子域上提供内容所需的内容有了一个高级概述,下一步是掌握用于查找易受攻击的子域的各种技术、技巧和工具。
在继续之前,我们必须首先区分抓取和强制,因为这两个过程都可以帮助您发现子域,但结果不同。爬网是一种被动侦察技术,可以使用外部服务和资源来采集属于特定主机的子域。
一些服务,例如 DNS Dumpster 和 VirusTotal,会索引过去爬过的子域,让您可以轻松快速采集和排序结果。
属于 DNS Dumpster 上的子域的结果。
爬取不仅涉及使用索引页面,还记得检查目标的 GIT 存储库、内容安全策略标头、源代码、问题跟踪器等。源列表是无穷无尽的,我不断寻找新的方法来增加我的结果。
通常,您发现自己的技术越独特,您就越有可能最终发现其他人遇到的情况。因此,请根据漏洞披露计划发挥创意并在实践中测试您的想法。
Ahmed Aboul-Ela 的 Sublist3r 可以说是最容易想到的子域抓取工具。这个轻量级 Python 脚本从众多搜索引擎、SSL 证书和 网站(如 DNS Dumpster)采集子域。我的个人电脑上的设置过程非常简单:
当暴力破解子域时,黑客会遍历单词列表并根据响应确定主机是否有效。请注意,始终检查目标是否启用了通配符非常重要,否则您会得到很多误报结果。
通配符只是意味着所有子域都将返回响应,从而扭曲结果。您可以通过请求目标可能未设置的看似随机的主机名来轻松检测通配符。
nbsp;host randomifje8z193hf8jafvh7g4q79gh274.example.com
为了在强制使用子域时获得最佳效果,我建议使用您过去遇到过的或通常与您感兴趣的服务相关联的术语来创建您自己的个人术语列表。例如,我经常发现自己在寻找主机关键字“jira”和“git”收录以下内容,因为有时我会发现易受攻击的 Atlassian Jira 和 GIT 实例。
如果您计划使用暴力破解子域,我强烈建议您查看 Jason Haddix 的单词列表。Jason 无法将子域发现工具中的列表合并为一个扩展列表。
指纹识别
为了增加查找子域的结果,无论您是抓取还是蛮力,您都可以使用一种称为指纹的技术。指纹识别允许您为目标创建自定义词表,并且可以揭示属于使用通用词表无法找到的目标的资产。
著名工具
有许多用于子域接管的工具。本节收录一些迄今为止尚未提及的重要内容。
替代域名
对于递归子域,请查看 Shubham Shah 的 Altdns 脚本。在通过 Altdns 对目标进行指纹识别后运行自定义词表可能非常有益。我喜欢使用 Altdns 生成单词列表,然后通过其他工具运行。
普通话
Shubham 的另一个工具 Commonspeak 是一种使用 Google 的 BigQuery 生成单词列表的工具。目标是生成反映当前趋势的单词列表,这在当今技术不断变化的时代尤为重要。如果您想更好地了解此工具的工作原理以及在哪里采集关键字,则值得一读。
子查找器
SubFinder 是抓取和蛮力的完美结合。我发现自己现在使用 SubFinder 作为通用子域发现工具比 Sublist3r 更多。为了获得更好的结果,请确保收录 SubFinder 为查找子域而抓取的各种服务的 API 密钥。
大数据
Massdns 是一个快速的子域枚举工具。使用某些工具可能需要一刻钟,Massdns 可以在一分钟内完成。请注意,如果您计划运行 Massdns,请确保为其提供有效解析器的列表。看一看,尝试解析器,看看哪个解析器返回最好的结果。如果你不更新解析器列表,你最终会得到很多误报。
$ ./scripts/subbrute.py lists/names.txt example.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt
自动化您的工作流程
在寻找子域接管时,自动化是关键。排名靠前的漏洞赏金猎人不断监控目标的变化,并密切关注他们可以找到的每个子域。对于本指南,我认为没有必要关注监控设置。相反,我想坚持一些简单的技巧,这些技巧可以节省您的时间并易于自动化。
我喜欢自动化的第一个任务是从主机列表中过滤掉实时子域。爬取子域时,部分结果会过期,不再可用;因此,我们需要确定哪些主机处于活动状态。
请记住,正如我们稍后将看到的,不能解析主机并不一定意味着它不能被劫持。这可以通过 host 命令轻松完成 - 不再活动的子域将返回错误。
并读取子域;如果主机 "$subdomain" > /dev/null; 然后 # 如果主机处于活动状态,则将其打印到名为“live.txt”的文件中。echo "$subdomain" >> live.txt fi
结束
因此,如果我们将到目前为止的所有内容放在一起,我们将得到以下工作流程。
特殊情况
我们需要注意一种特殊情况,Frans Rosén 在他的演讲“云提供商的 DNS 劫持 - 无需验证”中强调了一种情况。每当您遇到无效的 DNS 记录时,不要只是假设您无法劫持子域。正如 Frans 所指出的,host 命令可能会返回错误,但运行 dig 会显示过时的记录。
发展
是的,现在您控制了属于目标的子域,下一步是什么?在确定配置错误的子域的合理攻击场景时,了解该子域如何与基本名称和目标的核心服务交互至关重要。
饼干
范围内的cookies是可以修改的。记住这一点很重要,因为这可能允许您劫持受害者的基于基本名称的会话。
从,我们可以为 .
如果基本名称容易受到会话固定的影响,并且使用 HTTPOnly cookie,您可以设置一个 cookie,然后当用户重新启动浏览器时,您的恶意 cookie 将优先于新生成的 cookie,因为 cookie 按年龄排序。
跨域资源共享
跨域资源共享 (CORS) 是一种允许主机跨域共享页面内容的技术。该应用程序使用一组规则创建一个范围,这些规则允许主机提取收录经过身份验证的数据的数据。一些应用程序允许子域在假设子域是可信实体的情况下进行跨域 HTTP 请求。当您劫持子域时,查找 CORS 标头(Burp Suite Pro 的扫描器通常会拾取它们)并查看应用程序是否将子域列入白名单。这可能允许您从主应用程序上经过身份验证的用户那里窃取数据。
Oauth 白名单
与跨域资源共享类似,Oauth 流程也有一个白名单机制,开发人员可以通过该机制指定应该接受的回调 URI。当子域被列入白名单时,这里的危险再次出现,因此您可以在 Oauth 流程期间将用户重定向到您的子域,这可能会泄露他们的 Oauth 令牌。
内容安全政策
内容安全策略 (CSP) 是应用程序信任的另一个主机列表,但这里的目标是限制哪些主机可以在应用程序的上下文中执行客户端代码。如果您想最小化跨站点脚本的影响,此标头特别有用。如果您的子域收录在白名单中,则该子域可用于绕过策略并在应用程序上执行恶意客户端代码。
$ curl -sI https://hackerone.com | grep -i "content-security-policy"content-security-policy: default-src 'none'; base-uri 'self'; block-all-mixed-content; child-src www.youtube-nocookie.com; connect-src 'self' www.google-analytics.com errors.hackerone.net; font-src 'self'; form-action 'self'; frame-ancestors 'none'; img-src 'self' data: cover-photos.hackerone-user-content.com hackathon-photos.hackerone-user-content.com profile-photos.hackerone-user-content.com hackerone-us-west-2-production-attachments.s3-us-west-2.amazonaws.com; media-src 'self' hackerone-us-west-2-production-attachments.s3-us-west-2.amazonaws.com; script-src 'self' www.google-analytics.com;style-src 'self' 'unsafe-inline'; report-uri https://errors.hackerone.net/a ... 1f598
点击劫持
如《Cure53 浏览器安全白皮书》中所述,Internet Explorer、Edge 和 Safari 都支持 header 中的 ALLOW-FROM 指令 X-Frame-Options,这意味着如果您的子域被列入白名单,您可以将目标页面框架为一个点击劫持攻击。
密码管理器
这不一定要收录在报告中,但值得注意的是,一些密码管理器会自动填写属于主应用程序的子域的登录表单。
阻止电子邮件
Rojan Rijal 演示了如何通过在 SendGrid 上声明您所属的子域来拦截电子邮件。
报告子域接管
在尝试报告子域接管之前,请确保您实际上能够在子域上提供内容。但无论你做什么,都不要在索引页面上发布任何内容,即使是前面显示的青蛙的无害图片。最佳做法是在收录 HTML 注释中的秘密消息的隐藏路径中提供 HTML 文件。
当您最初与您的发现联系该程序时,足以证明问题的合理性。只有在团队授予您许可后,您才能尝试升级问题并实际展示此漏洞的整体影响。但是,在大多数情况下,团队应该已经意识到影响,并且您的报告应该收录有关子域接管的可利用性的信息。
花点时间写一份关于子域接管的报告,因为这种类型的问题可能非常有益,而且没有人指望你能击败报告,因为你(希望)是唯一控制子域的人。
作者注:我只目睹了一份关于子域接管的重复报告,因此尽管仍有可能,但这种情况不太可能发生。
我们已经到了本指南的结尾,我期待着在 HackerOne 上对您的子域接管报告进行分类。在寻找子域接管时,请记住练习并应用此 文章 中概述的技术。
关于最后一点,我要感谢 Frans Rosen、FileDescriptor、Mongo 和 Tom Hudson 就子域获取交换了意见。他们的研究是我在整个旅程中发现的许多事情的基础。
文章3810字,约12分钟阅读
翻译自: 查看全部
php curl抓取网页(利用和报告子域错误配置创建一个总体指南(组图))
HackerOne 的 Hacktivity 提要 - 公开披露报告的精选提要 - 看到了相当一部分关于子域收购的报告。自从 Detectify 关于子域接管的优秀系列 文章 以来,漏洞赏金行业一直在迅速收到有关此类问题的报告。
子域接管的基本前提是主机指向当前未使用的特定服务,攻击者可以通过在第三方服务上建立帐户来使用该服务在易受攻击的子域上提供内容。作为一名黑客和安全分析师,我每天都在处理这类问题。
我今天的目标是为理解、查找、利用和报告子域错误配置创建一个通用指南。本文假设读者对域名系统 (DNS) 有基本的了解,并且知道如何设置子域。
子域接管简介
如果您以前从未执行过子域接管,或者想要新的介绍,我设计了一个示例场景来帮助您解释基础知识。对于这种情况,我们假设
是目标,并且运行团队有一个错误赏金计划。在枚举属于所有子域时,我们偶然发现
在此过程中,黑客偶然发现了一个指向 GitHub Pages 的子域。我们可以通过查看子域的 DNS 记录来确定这一点;在这个例子中,有多个 A 记录指向 GitHub 自定义页面的私有 IP 地址。
$ host subdomain.example.comsubdomain.example.com has address 192.30.252.153subdomain.example.com has address 192.30.252.154$ whois 192.30.252.153 | grep "OrgName"OrgName: GitHub, Inc.
去的时候,发现如下404错误页面。
在这一点上,大多数黑客的头脑都开始麻木了。这个 404 页面表明顶级目录下没有可用的内容,我们应该尝试将此子域添加到我们的个人 GitHub 存储库。请注意,这并不意味着可以在所有应用程序上进行接管。某些应用程序类型要求您检查 HTTP 和 HTTPS 响应以进行接管,而其他应用程序类型可能根本没有漏洞。
将自定义子域添加到我们的 GitHub 项目后,我们可以看到存储库的内容已被提供——我们已经成功声明了子域。出于演示目的,索引页面现在显示青蛙的图片。
二阶子域接管
二阶子域接管,我想称之为“断开链接劫持”,是易受攻击的子域,不一定属于目标,但用于在目标 网站 上提供内容。
这意味着,例如,资源是通过 JavaScript 块导入到目标页面上的,黑客可以声明要从中导入资源的子域。劫持在页面某处使用的主机最终会导致存储跨站点脚本,因为攻击者可以在目标页面上加载任意客户端代码。
我想在本指南中列出这个问题的原因是为了强调一个事实,作为一名黑客,我不想将自己限制在目标主机上的子域中。您可以通过检查源代码并映射目标所依赖的所有主机来轻松扩展范围。
这也是为什么如果您要劫持子域,值得花时间查看是否有任何页面从子域导入资产。
子域枚举和发现
既然我们对在配置错误的子域上提供内容所需的内容有了一个高级概述,下一步是掌握用于查找易受攻击的子域的各种技术、技巧和工具。
在继续之前,我们必须首先区分抓取和强制,因为这两个过程都可以帮助您发现子域,但结果不同。爬网是一种被动侦察技术,可以使用外部服务和资源来采集属于特定主机的子域。
一些服务,例如 DNS Dumpster 和 VirusTotal,会索引过去爬过的子域,让您可以轻松快速采集和排序结果。
属于 DNS Dumpster 上的子域的结果。
爬取不仅涉及使用索引页面,还记得检查目标的 GIT 存储库、内容安全策略标头、源代码、问题跟踪器等。源列表是无穷无尽的,我不断寻找新的方法来增加我的结果。
通常,您发现自己的技术越独特,您就越有可能最终发现其他人遇到的情况。因此,请根据漏洞披露计划发挥创意并在实践中测试您的想法。
Ahmed Aboul-Ela 的 Sublist3r 可以说是最容易想到的子域抓取工具。这个轻量级 Python 脚本从众多搜索引擎、SSL 证书和 网站(如 DNS Dumpster)采集子域。我的个人电脑上的设置过程非常简单:
当暴力破解子域时,黑客会遍历单词列表并根据响应确定主机是否有效。请注意,始终检查目标是否启用了通配符非常重要,否则您会得到很多误报结果。
通配符只是意味着所有子域都将返回响应,从而扭曲结果。您可以通过请求目标可能未设置的看似随机的主机名来轻松检测通配符。
nbsp;host randomifje8z193hf8jafvh7g4q79gh274.example.com
为了在强制使用子域时获得最佳效果,我建议使用您过去遇到过的或通常与您感兴趣的服务相关联的术语来创建您自己的个人术语列表。例如,我经常发现自己在寻找主机关键字“jira”和“git”收录以下内容,因为有时我会发现易受攻击的 Atlassian Jira 和 GIT 实例。
如果您计划使用暴力破解子域,我强烈建议您查看 Jason Haddix 的单词列表。Jason 无法将子域发现工具中的列表合并为一个扩展列表。
指纹识别
为了增加查找子域的结果,无论您是抓取还是蛮力,您都可以使用一种称为指纹的技术。指纹识别允许您为目标创建自定义词表,并且可以揭示属于使用通用词表无法找到的目标的资产。
著名工具
有许多用于子域接管的工具。本节收录一些迄今为止尚未提及的重要内容。
替代域名
对于递归子域,请查看 Shubham Shah 的 Altdns 脚本。在通过 Altdns 对目标进行指纹识别后运行自定义词表可能非常有益。我喜欢使用 Altdns 生成单词列表,然后通过其他工具运行。
普通话
Shubham 的另一个工具 Commonspeak 是一种使用 Google 的 BigQuery 生成单词列表的工具。目标是生成反映当前趋势的单词列表,这在当今技术不断变化的时代尤为重要。如果您想更好地了解此工具的工作原理以及在哪里采集关键字,则值得一读。
子查找器
SubFinder 是抓取和蛮力的完美结合。我发现自己现在使用 SubFinder 作为通用子域发现工具比 Sublist3r 更多。为了获得更好的结果,请确保收录 SubFinder 为查找子域而抓取的各种服务的 API 密钥。
大数据
Massdns 是一个快速的子域枚举工具。使用某些工具可能需要一刻钟,Massdns 可以在一分钟内完成。请注意,如果您计划运行 Massdns,请确保为其提供有效解析器的列表。看一看,尝试解析器,看看哪个解析器返回最好的结果。如果你不更新解析器列表,你最终会得到很多误报。
$ ./scripts/subbrute.py lists/names.txt example.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt
自动化您的工作流程
在寻找子域接管时,自动化是关键。排名靠前的漏洞赏金猎人不断监控目标的变化,并密切关注他们可以找到的每个子域。对于本指南,我认为没有必要关注监控设置。相反,我想坚持一些简单的技巧,这些技巧可以节省您的时间并易于自动化。
我喜欢自动化的第一个任务是从主机列表中过滤掉实时子域。爬取子域时,部分结果会过期,不再可用;因此,我们需要确定哪些主机处于活动状态。
请记住,正如我们稍后将看到的,不能解析主机并不一定意味着它不能被劫持。这可以通过 host 命令轻松完成 - 不再活动的子域将返回错误。
并读取子域;如果主机 "$subdomain" > /dev/null; 然后 # 如果主机处于活动状态,则将其打印到名为“live.txt”的文件中。echo "$subdomain" >> live.txt fi
结束
因此,如果我们将到目前为止的所有内容放在一起,我们将得到以下工作流程。
特殊情况
我们需要注意一种特殊情况,Frans Rosén 在他的演讲“云提供商的 DNS 劫持 - 无需验证”中强调了一种情况。每当您遇到无效的 DNS 记录时,不要只是假设您无法劫持子域。正如 Frans 所指出的,host 命令可能会返回错误,但运行 dig 会显示过时的记录。
发展
是的,现在您控制了属于目标的子域,下一步是什么?在确定配置错误的子域的合理攻击场景时,了解该子域如何与基本名称和目标的核心服务交互至关重要。
饼干
范围内的cookies是可以修改的。记住这一点很重要,因为这可能允许您劫持受害者的基于基本名称的会话。
从,我们可以为 .
如果基本名称容易受到会话固定的影响,并且使用 HTTPOnly cookie,您可以设置一个 cookie,然后当用户重新启动浏览器时,您的恶意 cookie 将优先于新生成的 cookie,因为 cookie 按年龄排序。
跨域资源共享
跨域资源共享 (CORS) 是一种允许主机跨域共享页面内容的技术。该应用程序使用一组规则创建一个范围,这些规则允许主机提取收录经过身份验证的数据的数据。一些应用程序允许子域在假设子域是可信实体的情况下进行跨域 HTTP 请求。当您劫持子域时,查找 CORS 标头(Burp Suite Pro 的扫描器通常会拾取它们)并查看应用程序是否将子域列入白名单。这可能允许您从主应用程序上经过身份验证的用户那里窃取数据。
Oauth 白名单
与跨域资源共享类似,Oauth 流程也有一个白名单机制,开发人员可以通过该机制指定应该接受的回调 URI。当子域被列入白名单时,这里的危险再次出现,因此您可以在 Oauth 流程期间将用户重定向到您的子域,这可能会泄露他们的 Oauth 令牌。
内容安全政策
内容安全策略 (CSP) 是应用程序信任的另一个主机列表,但这里的目标是限制哪些主机可以在应用程序的上下文中执行客户端代码。如果您想最小化跨站点脚本的影响,此标头特别有用。如果您的子域收录在白名单中,则该子域可用于绕过策略并在应用程序上执行恶意客户端代码。
$ curl -sI https://hackerone.com | grep -i "content-security-policy"content-security-policy: default-src 'none'; base-uri 'self'; block-all-mixed-content; child-src www.youtube-nocookie.com; connect-src 'self' www.google-analytics.com errors.hackerone.net; font-src 'self'; form-action 'self'; frame-ancestors 'none'; img-src 'self' data: cover-photos.hackerone-user-content.com hackathon-photos.hackerone-user-content.com profile-photos.hackerone-user-content.com hackerone-us-west-2-production-attachments.s3-us-west-2.amazonaws.com; media-src 'self' hackerone-us-west-2-production-attachments.s3-us-west-2.amazonaws.com; script-src 'self' www.google-analytics.com;style-src 'self' 'unsafe-inline'; report-uri https://errors.hackerone.net/a ... 1f598
点击劫持
如《Cure53 浏览器安全白皮书》中所述,Internet Explorer、Edge 和 Safari 都支持 header 中的 ALLOW-FROM 指令 X-Frame-Options,这意味着如果您的子域被列入白名单,您可以将目标页面框架为一个点击劫持攻击。
密码管理器
这不一定要收录在报告中,但值得注意的是,一些密码管理器会自动填写属于主应用程序的子域的登录表单。
阻止电子邮件
Rojan Rijal 演示了如何通过在 SendGrid 上声明您所属的子域来拦截电子邮件。
报告子域接管
在尝试报告子域接管之前,请确保您实际上能够在子域上提供内容。但无论你做什么,都不要在索引页面上发布任何内容,即使是前面显示的青蛙的无害图片。最佳做法是在收录 HTML 注释中的秘密消息的隐藏路径中提供 HTML 文件。
当您最初与您的发现联系该程序时,足以证明问题的合理性。只有在团队授予您许可后,您才能尝试升级问题并实际展示此漏洞的整体影响。但是,在大多数情况下,团队应该已经意识到影响,并且您的报告应该收录有关子域接管的可利用性的信息。
花点时间写一份关于子域接管的报告,因为这种类型的问题可能非常有益,而且没有人指望你能击败报告,因为你(希望)是唯一控制子域的人。
作者注:我只目睹了一份关于子域接管的重复报告,因此尽管仍有可能,但这种情况不太可能发生。
我们已经到了本指南的结尾,我期待着在 HackerOne 上对您的子域接管报告进行分类。在寻找子域接管时,请记住练习并应用此 文章 中概述的技术。
关于最后一点,我要感谢 Frans Rosen、FileDescriptor、Mongo 和 Tom Hudson 就子域获取交换了意见。他们的研究是我在整个旅程中发现的许多事情的基础。
文章3810字,约12分钟阅读
翻译自:
php curl抓取网页(什么是网络爬虫?PHP和Python都写过爬虫和提取程序)
网站优化 • 优采云 发表了文章 • 0 个评论 • 100 次浏览 • 2021-12-28 23:05
什么是网络爬虫?
网络爬虫是一种自动提取网页的程序。它从万维网上下载网页供搜索引擎使用,是搜索引擎的重要组成部分。传统爬虫从一个或多个初始网页的网址开始,获取初始网页上的网址。在爬取网页的过程中,他们不断地从当前页面中提取新的URL并将它们放入队列中,直到满足系统的某个停止条件。
爬虫有什么用?
很多语言都可以用来编写爬虫,比如Java、PHP、Python等。每个都有自己的优点和缺点。
PHP 和 Python 都编写了爬虫和文本提取程序。
一开始用PHP,所以说一下PHP的优点:
1. 语言比较简单,PHP是一门很随意的语言。写起来很容易,这样你就可以专注于你想做的事情,而不是各种语法规则等等。
2. 各种功能模块齐全,这里分两部分:
1.网页下载:curl等扩展库;
2. 文档解析:dom、xpath、tidy、各种转码工具,可能与题主的不同。我的爬虫需要提取文本,所以需要非常复杂的文本处理,所以很方便 文本处理工具是我的大爱。;
简而言之,它很容易上手。
缺点:
1. 并发处理能力弱:由于当时PHP没有线程和进程功能,如果要实现并发,就需要借用多服务模型。PHP 使用选择模型。实现起来比较麻烦,可能是因为级别的问题,我的程序中经常会出现一些错误,导致miss catch。
让我们谈谈Python:
优势:
1.各种爬虫框架,方便高效的下载网页;
2.多线程,成熟稳定的进程模型,爬虫是典型的多任务场景,请求一个页面的时候会有很长的延迟,一般来说等待比较多。多线程或进程将优化程序的效率,提高整个系统的下载和分析能力。
3.GAE 支持。我写爬虫的时候只有GAE,而且只支持Python。用 GAE 创建的爬虫几乎是免费的。最多,我有将近一千个应用程序示例在工作。
缺点:
1. 对非标准HTML的适应性差:比如一个页面中同时有GB18030字符集中的中文和UTF-8字符集中的中文,Python处理就没有PHP那么简单了,你需要自己做很多判断工作。当然这在提取文本的时候就麻烦了。
当时还检查了 Java 和 C++。它们比脚本语言更麻烦,所以我放弃了。
总之,如果你开发一种小型爬虫脚本语言,它在各方面都是一种优势语言。如果你想开发一个复杂的爬虫系统,Java可能是一个附加选项,而C++我认为写一个模块更合适。对于爬虫系统来说,下载和内容分析只是两个基本功能。一个真正好的系统还包括完整的任务调度、监控、存储、页面数据存储和更新逻辑、重新加载等。Crawler是一个消耗带宽的应用,一个好的设计会节省大量的带宽和服务器资源,好坏差距很大。
全面的
写爬虫就是边测试边写。但是考试改了。这个过程用python写最方便。
而python相关的库也是最方便的。有request、jieba、redis、gevent、NLTK、lxml、pyquery、BeautifulSoup、Pillow。最简单的爬虫和极其复杂的爬虫都可以轻松处理。 查看全部
php curl抓取网页(什么是网络爬虫?PHP和Python都写过爬虫和提取程序)
什么是网络爬虫?
网络爬虫是一种自动提取网页的程序。它从万维网上下载网页供搜索引擎使用,是搜索引擎的重要组成部分。传统爬虫从一个或多个初始网页的网址开始,获取初始网页上的网址。在爬取网页的过程中,他们不断地从当前页面中提取新的URL并将它们放入队列中,直到满足系统的某个停止条件。
爬虫有什么用?
很多语言都可以用来编写爬虫,比如Java、PHP、Python等。每个都有自己的优点和缺点。
PHP 和 Python 都编写了爬虫和文本提取程序。
一开始用PHP,所以说一下PHP的优点:
1. 语言比较简单,PHP是一门很随意的语言。写起来很容易,这样你就可以专注于你想做的事情,而不是各种语法规则等等。
2. 各种功能模块齐全,这里分两部分:
1.网页下载:curl等扩展库;
2. 文档解析:dom、xpath、tidy、各种转码工具,可能与题主的不同。我的爬虫需要提取文本,所以需要非常复杂的文本处理,所以很方便 文本处理工具是我的大爱。;
简而言之,它很容易上手。
缺点:
1. 并发处理能力弱:由于当时PHP没有线程和进程功能,如果要实现并发,就需要借用多服务模型。PHP 使用选择模型。实现起来比较麻烦,可能是因为级别的问题,我的程序中经常会出现一些错误,导致miss catch。
让我们谈谈Python:
优势:
1.各种爬虫框架,方便高效的下载网页;
2.多线程,成熟稳定的进程模型,爬虫是典型的多任务场景,请求一个页面的时候会有很长的延迟,一般来说等待比较多。多线程或进程将优化程序的效率,提高整个系统的下载和分析能力。
3.GAE 支持。我写爬虫的时候只有GAE,而且只支持Python。用 GAE 创建的爬虫几乎是免费的。最多,我有将近一千个应用程序示例在工作。
缺点:
1. 对非标准HTML的适应性差:比如一个页面中同时有GB18030字符集中的中文和UTF-8字符集中的中文,Python处理就没有PHP那么简单了,你需要自己做很多判断工作。当然这在提取文本的时候就麻烦了。
当时还检查了 Java 和 C++。它们比脚本语言更麻烦,所以我放弃了。
总之,如果你开发一种小型爬虫脚本语言,它在各方面都是一种优势语言。如果你想开发一个复杂的爬虫系统,Java可能是一个附加选项,而C++我认为写一个模块更合适。对于爬虫系统来说,下载和内容分析只是两个基本功能。一个真正好的系统还包括完整的任务调度、监控、存储、页面数据存储和更新逻辑、重新加载等。Crawler是一个消耗带宽的应用,一个好的设计会节省大量的带宽和服务器资源,好坏差距很大。
全面的
写爬虫就是边测试边写。但是考试改了。这个过程用python写最方便。
而python相关的库也是最方便的。有request、jieba、redis、gevent、NLTK、lxml、pyquery、BeautifulSoup、Pillow。最简单的爬虫和极其复杂的爬虫都可以轻松处理。
php curl抓取网页(并教你如何更好的使用php_curl库的知识,并教)
网站优化 • 优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2021-11-13 07:15
概括:
在这个文章中,我们主要讲解php_curl库的知识,教大家更好的使用php_curl。
介绍
您在 PHP 脚本代码中可能会遇到这样一个问题:如何从其他站点获取内容?这里有几种解决方案;最简单的就是在php中使用fopen()函数,但是fopen函数没有足够的参数可以使用。例如,当你想构建一个“网络爬虫”时,你想定义爬虫的客户端描述(IE,firefox),通过不同的请求方式获取内容,如POST、GET;等。这些要求是不可能用 fopen() 函数实现的。
为了解决我们上面提出的问题,我们可以使用PHP的扩展库-Curl。这个扩展库通常默认收录在安装包中。您可以使用它来获取其他网站的内容或做其他事情。
注意:这两段代码需要php_curl扩展库的支持。检查 phpinfo()。如果启用了 curl 支持,则表示支持 curl 库。
1、Windows下PHP开启curl库支持:
打开 php.ini 并删除;在 extension=php_curl.dll 之前。
2、Linux下PHP开启curl库支持:
编译PHP时在./configure后面添加--with-curl
在这个文章中,我们来看看curl库的使用方法,看看它的其他用途,但接下来,我们将从最基本的用法开始
基本用法:
第一步,我们通过函数curl_init()新建一个curl会话,代码如下:
我们已经成功创建了一个 curl 会话。如果需要获取一个 URL 的内容,那么下一步就是将 URL 传递给 curl_setopt() 函数,代码:
上一步完成后,curl的准备工作就完成了,curl会获取URL站点的内容并打印出来。代码:
最后,关闭当前的 curl 会话
我们来看一下完成的示例代码:
(查看在线演示)
我们刚刚获取了另一个站点的内容,并自动将其输出到浏览器。我们还有其他的方式来组织获取的信息,然后控制输出的内容吗?完全没有问题。在curl_setopt()函数的参数中,如果想获取内容但不输出,使用CURLOPT_RETURNTRANSFER参数并设置为非零值/true!,完整代码请看:
(查看在线演示)
在上面的两个例子中,你可能会注意到,通过设置函数 curl_setopt() 的不同参数可以得到不同的结果。这就是 curl 如此强大的原因。下面我们来看看这些参数的含义。
CURL 的相关选项:
如果你看过php手册中的curl_setopt()函数,你会注意到它下面有一长串参数,我们无法一一介绍。更多内容请查看PHP手册。这里我们只介绍常用的和一些参数。
第一个有趣的参数是 CURLOPT_FOLLOWLOCATION。当您将此参数设置为 true 时,curl 将根据任何重定向命令获得更深的重定向路径。例如:当你尝试获取一个PHP页面时,那么这个PHP页面中有跳转代码,curl会获取内容而不是返回跳转代码。完整代码如下:
(查看在线演示),
如果 Google 发送重定向请求,上面的示例将继续根据重定向的 URL 获取内容。与此参数相关的两个选项是 CURLOPT_MAXREDIRS 和 CURLOPT_AUTOREFERER。
参数 CURLOPT_MAXREDIRS 选项允许您定义跳转请求的最大数量,超过该数量将不再检索内容。如果 CURLOPT_AUTOREFERER 设置为 true,curl 将自动将 Referer 标头添加到每个重定向链接。它可能不是很重要,但在某些情况下非常有用。
下一步引入的参数是 CURLOPT_POST,这是一个非常有用的特性,因为它允许你做 POST 请求而不是 GET 请求,这实际上意味着你可以提交
对于其他形式的页面,无需实际填写表格。以下示例显示了我的意思:
(查看现场演示)
和 handle_form.php 文件:
如您所见,这使得提交表单变得非常容易,这是一种无需一直填写即可测试所有表单的好方法。
参数 CURLOPT_CONNECTTIMEOUT 通常用于设置 curl 尝试请求链接的时间。这是一个非常重要的选择。如果这个时间设置的太短,可能会导致 curl 请求失败。
但是如果设置的时间太长,PHP 脚本可能会死掉。与此参数相关的一个选项是 CURLOPT_TIMEOUT,用于设置 curl 执行所需的时间。如果将此值设置为很小的值,可能会导致网页下载不完整,因为下载需要一段时间。
最后一个选项是CURLOPT_USERAGENT,可以自定义请求的客户端名称,比如webspilder或者IE6.0.,示例代码如下:
(查看现场演示)
现在我们已经介绍了最有趣的参数之一,让我们介绍一个 curl_getinfo() 函数,看看它可以为我们做什么。
获取页面信息:
函数 curl_getinfo() 允许我们获取接收页面的各种信息。您可以通过设置选项的第二个参数来编辑此信息。也可以以数组的形式传递数组。就像下面的例子:
(查看现场演示)
返回的信息大部分是请求本身,比如:请求所用的时间,返回的头文件信息,当然还有一些页面信息,比如页面内容的大小,最后修改时间等。
这些都是关于 curl_getinfo() 函数,现在让我们看看它的实际用途。
真正的功能:
curl 库的第一个用途是检查 URL 页面是否存在。我们可以通过查看URL请求返回的代码来判断。例如,404 表示该页面不存在。让我们看一些例子:
(查看现场演示)
其他用户可能会创建一个自动检查器来验证每个请求页面的存在。
我们可以使用 curl 库来编写类似于 Google 的网络蜘蛛,或者其他网络蜘蛛。这篇文章文章不是关于如何写一个网络蜘蛛,所以我们没有谈论任何关于网络蜘蛛的细节,但是PHPit将来会介绍使用curl来构建一个网络蜘蛛。
综上所述:
在这个 文章 中,我展示了如何在 php 中使用 curl 库及其大部分选项。
对于最基本的任务,只想获取一个网页,你可能不需要 CURL 库,但是一旦你想做一些稍微高级的事情,你可能想要使用 curl 库。
在不久的将来,我会告诉你如何构建自己的网络蜘蛛,类似于谷歌的网络蜘蛛,敬请关注phpit。
转载于: 查看全部
php curl抓取网页(并教你如何更好的使用php_curl库的知识,并教)
概括:
在这个文章中,我们主要讲解php_curl库的知识,教大家更好的使用php_curl。
介绍
您在 PHP 脚本代码中可能会遇到这样一个问题:如何从其他站点获取内容?这里有几种解决方案;最简单的就是在php中使用fopen()函数,但是fopen函数没有足够的参数可以使用。例如,当你想构建一个“网络爬虫”时,你想定义爬虫的客户端描述(IE,firefox),通过不同的请求方式获取内容,如POST、GET;等。这些要求是不可能用 fopen() 函数实现的。
为了解决我们上面提出的问题,我们可以使用PHP的扩展库-Curl。这个扩展库通常默认收录在安装包中。您可以使用它来获取其他网站的内容或做其他事情。
注意:这两段代码需要php_curl扩展库的支持。检查 phpinfo()。如果启用了 curl 支持,则表示支持 curl 库。
1、Windows下PHP开启curl库支持:
打开 php.ini 并删除;在 extension=php_curl.dll 之前。
2、Linux下PHP开启curl库支持:
编译PHP时在./configure后面添加--with-curl
在这个文章中,我们来看看curl库的使用方法,看看它的其他用途,但接下来,我们将从最基本的用法开始
基本用法:
第一步,我们通过函数curl_init()新建一个curl会话,代码如下:
我们已经成功创建了一个 curl 会话。如果需要获取一个 URL 的内容,那么下一步就是将 URL 传递给 curl_setopt() 函数,代码:
上一步完成后,curl的准备工作就完成了,curl会获取URL站点的内容并打印出来。代码:
最后,关闭当前的 curl 会话
我们来看一下完成的示例代码:
(查看在线演示)
我们刚刚获取了另一个站点的内容,并自动将其输出到浏览器。我们还有其他的方式来组织获取的信息,然后控制输出的内容吗?完全没有问题。在curl_setopt()函数的参数中,如果想获取内容但不输出,使用CURLOPT_RETURNTRANSFER参数并设置为非零值/true!,完整代码请看:
(查看在线演示)
在上面的两个例子中,你可能会注意到,通过设置函数 curl_setopt() 的不同参数可以得到不同的结果。这就是 curl 如此强大的原因。下面我们来看看这些参数的含义。
CURL 的相关选项:
如果你看过php手册中的curl_setopt()函数,你会注意到它下面有一长串参数,我们无法一一介绍。更多内容请查看PHP手册。这里我们只介绍常用的和一些参数。
第一个有趣的参数是 CURLOPT_FOLLOWLOCATION。当您将此参数设置为 true 时,curl 将根据任何重定向命令获得更深的重定向路径。例如:当你尝试获取一个PHP页面时,那么这个PHP页面中有跳转代码,curl会获取内容而不是返回跳转代码。完整代码如下:
(查看在线演示),
如果 Google 发送重定向请求,上面的示例将继续根据重定向的 URL 获取内容。与此参数相关的两个选项是 CURLOPT_MAXREDIRS 和 CURLOPT_AUTOREFERER。
参数 CURLOPT_MAXREDIRS 选项允许您定义跳转请求的最大数量,超过该数量将不再检索内容。如果 CURLOPT_AUTOREFERER 设置为 true,curl 将自动将 Referer 标头添加到每个重定向链接。它可能不是很重要,但在某些情况下非常有用。
下一步引入的参数是 CURLOPT_POST,这是一个非常有用的特性,因为它允许你做 POST 请求而不是 GET 请求,这实际上意味着你可以提交
对于其他形式的页面,无需实际填写表格。以下示例显示了我的意思:
(查看现场演示)
和 handle_form.php 文件:
如您所见,这使得提交表单变得非常容易,这是一种无需一直填写即可测试所有表单的好方法。
参数 CURLOPT_CONNECTTIMEOUT 通常用于设置 curl 尝试请求链接的时间。这是一个非常重要的选择。如果这个时间设置的太短,可能会导致 curl 请求失败。
但是如果设置的时间太长,PHP 脚本可能会死掉。与此参数相关的一个选项是 CURLOPT_TIMEOUT,用于设置 curl 执行所需的时间。如果将此值设置为很小的值,可能会导致网页下载不完整,因为下载需要一段时间。
最后一个选项是CURLOPT_USERAGENT,可以自定义请求的客户端名称,比如webspilder或者IE6.0.,示例代码如下:
(查看现场演示)
现在我们已经介绍了最有趣的参数之一,让我们介绍一个 curl_getinfo() 函数,看看它可以为我们做什么。
获取页面信息:
函数 curl_getinfo() 允许我们获取接收页面的各种信息。您可以通过设置选项的第二个参数来编辑此信息。也可以以数组的形式传递数组。就像下面的例子:
(查看现场演示)
返回的信息大部分是请求本身,比如:请求所用的时间,返回的头文件信息,当然还有一些页面信息,比如页面内容的大小,最后修改时间等。
这些都是关于 curl_getinfo() 函数,现在让我们看看它的实际用途。
真正的功能:
curl 库的第一个用途是检查 URL 页面是否存在。我们可以通过查看URL请求返回的代码来判断。例如,404 表示该页面不存在。让我们看一些例子:
(查看现场演示)
其他用户可能会创建一个自动检查器来验证每个请求页面的存在。
我们可以使用 curl 库来编写类似于 Google 的网络蜘蛛,或者其他网络蜘蛛。这篇文章文章不是关于如何写一个网络蜘蛛,所以我们没有谈论任何关于网络蜘蛛的细节,但是PHPit将来会介绍使用curl来构建一个网络蜘蛛。
综上所述:
在这个 文章 中,我展示了如何在 php 中使用 curl 库及其大部分选项。
对于最基本的任务,只想获取一个网页,你可能不需要 CURL 库,但是一旦你想做一些稍微高级的事情,你可能想要使用 curl 库。
在不久的将来,我会告诉你如何构建自己的网络蜘蛛,类似于谷歌的网络蜘蛛,敬请关注phpit。
转载于:
php curl抓取网页(比较,结合实例形式详细分析了curl_init()和curl)
网站优化 • 优采云 发表了文章 • 0 个评论 • 72 次浏览 • 2021-10-16 13:33
本文文章主要介绍php使用curl_init()和curl_multi_init()多线程的速度对比,并结合curl_init()和curl_multi_init()的具体使用方法及相关效率对比进行详细分析示例表格。有需要的朋友可以参考
本文介绍了 PHP 使用 curl_init() 和 curl_multi_init() 多线程的速度对比。分享给大家,供大家参考,如下:
php中curl_init()的作用很棒,尤其是在爬取网页内容或者文件信息的时候。比如之前的文章《》介绍了curl_init()的强大。
curl_init() 以单线程模式处理事情。如果需要使用多线程模式进行事务处理,那么php为我们提供了一个函数curl_multi_init(),就是多线程模式处理事务的功能。
curl_init() 和 curl_multi_init() 速度对比
curl_multi_init() 多线程可以提高网页的处理速度吗?今天我将通过实验来验证这个问题。
我今天的测试很简单,就是抓取网页内容,连续抓取5次,分别使用curl_init()和curl_multi_init()函数来完成,记录下两者的耗时,将它们进行比较得出结论。
首先,使用 curl_init() 在单个线程中抓取网页内容 5 次。
程序代码如下:
然后,使用 curl_multi_init() 多线程连续抓取网页内容 5 次。
代码显示如下:
<p> 查看全部
php curl抓取网页(比较,结合实例形式详细分析了curl_init()和curl)
本文文章主要介绍php使用curl_init()和curl_multi_init()多线程的速度对比,并结合curl_init()和curl_multi_init()的具体使用方法及相关效率对比进行详细分析示例表格。有需要的朋友可以参考
本文介绍了 PHP 使用 curl_init() 和 curl_multi_init() 多线程的速度对比。分享给大家,供大家参考,如下:
php中curl_init()的作用很棒,尤其是在爬取网页内容或者文件信息的时候。比如之前的文章《》介绍了curl_init()的强大。
curl_init() 以单线程模式处理事情。如果需要使用多线程模式进行事务处理,那么php为我们提供了一个函数curl_multi_init(),就是多线程模式处理事务的功能。
curl_init() 和 curl_multi_init() 速度对比
curl_multi_init() 多线程可以提高网页的处理速度吗?今天我将通过实验来验证这个问题。
我今天的测试很简单,就是抓取网页内容,连续抓取5次,分别使用curl_init()和curl_multi_init()函数来完成,记录下两者的耗时,将它们进行比较得出结论。
首先,使用 curl_init() 在单个线程中抓取网页内容 5 次。
程序代码如下:
然后,使用 curl_multi_init() 多线程连续抓取网页内容 5 次。
代码显示如下:
<p>
php curl抓取网页( 远程网页内容的php代码,做小偷采集程序的程序经常用得到)
网站优化 • 优采云 发表了文章 • 0 个评论 • 123 次浏览 • 2021-09-17 12:02
远程网页内容的php代码,做小偷采集程序的程序经常用得到)
获取远程网页内容的PHP代码(fopen,经过测试)
更新时间:2011年6月6日09:05:33作者:
获取远程网页内容的PHP代码通常用作小偷采集程序。现在卷曲被更多地使用
1、fopen使用
副本代码如下:
副本代码如下:
//对于PHP5和更高版本,可以使用以下代码
但是上面的代码很容易打开流失败:http请求失败!错误、解决方案
有人说,在php.ini中,有两个选项:allow_url_ufopen=on(表示可以通过url打开远程文件),user_Agent=“php”(表示使用哪个脚本访问网络。默认情况下,前面有一个“;”,只需删除它)重新启动服务器
然而,有些人仍然有这个警告信息。离完美解决方案还有一步之遥。您必须在php.ini u代理中设置用户,php默认用户u代理是php,我们将其更改为Mozilla/4.0(兼容;MSIE6.0;Windows NT5.0)以模拟浏览器
<IMG src="/upload/201106/20110606090106493.gif" border=0>
user\u agent=“Mozilla/4.0(兼容;MSIE6.0;Windows NT5.0)”
我在工作中遇到了这个问题,并完美地解决了它,因此我将与您分享
2、由curl实现
副本代码如下:
在Linux下,您可以使用以下代码下载
exec(“wget{$url}”)
PHP获取外部资源函数fopen/file\u get\u contents/curl
Fopen/file\u get\u内容每次请求都会重复DNS查询,并且不会缓存DNS信息
但是,curl将自动缓存DNS信息。对同一域名下的网页或图片的请求只需要一个DNS查询
这大大减少了DNS查询的数量
因此,curl的性能远远优于fopen/file\u get\u contents 查看全部
php curl抓取网页(
远程网页内容的php代码,做小偷采集程序的程序经常用得到)
获取远程网页内容的PHP代码(fopen,经过测试)
更新时间:2011年6月6日09:05:33作者:
获取远程网页内容的PHP代码通常用作小偷采集程序。现在卷曲被更多地使用
1、fopen使用
副本代码如下:
副本代码如下:
//对于PHP5和更高版本,可以使用以下代码
但是上面的代码很容易打开流失败:http请求失败!错误、解决方案
有人说,在php.ini中,有两个选项:allow_url_ufopen=on(表示可以通过url打开远程文件),user_Agent=“php”(表示使用哪个脚本访问网络。默认情况下,前面有一个“;”,只需删除它)重新启动服务器
然而,有些人仍然有这个警告信息。离完美解决方案还有一步之遥。您必须在php.ini u代理中设置用户,php默认用户u代理是php,我们将其更改为Mozilla/4.0(兼容;MSIE6.0;Windows NT5.0)以模拟浏览器
<IMG src="/upload/201106/20110606090106493.gif" border=0>
user\u agent=“Mozilla/4.0(兼容;MSIE6.0;Windows NT5.0)”
我在工作中遇到了这个问题,并完美地解决了它,因此我将与您分享
2、由curl实现
副本代码如下:
在Linux下,您可以使用以下代码下载
exec(“wget{$url}”)
PHP获取外部资源函数fopen/file\u get\u contents/curl
Fopen/file\u get\u内容每次请求都会重复DNS查询,并且不会缓存DNS信息
但是,curl将自动缓存DNS信息。对同一域名下的网页或图片的请求只需要一个DNS查询
这大大减少了DNS查询的数量
因此,curl的性能远远优于fopen/file\u get\u contents
php curl抓取网页(如何使用PHP脚本代码中会的使用_curl代码如下)
网站优化 • 优采云 发表了文章 • 0 个评论 • 109 次浏览 • 2021-09-10 08:04
配置方法:
1、将PHP目录下的libeay32.dll和ssleay32.dll两个文件复制到system32目录下。
2、Modify php.ini:配置extension_dir,去掉extension=php_curl.dll前的分号。
总结:
在这个文章中,我主要讲解php_curl库的知识,教大家如何更好的使用php_curl。
简介
您在 PHP 脚本代码中可能会遇到这样一个问题:如何从其他站点获取内容?这里有几种解决方案;最简单的就是在php中使用fopen()函数或者fsockopen()函数,但是fopen函数和fsockopen()函数没有足够的参数可以使用,比如当你想搭建一个“网络爬虫”的时候,我要定义爬虫(IE、firefox)的客户端描述,通过不同的请求方式获取内容,如POST、GET;等等。这些要求是用 fopen() 函数和 fsockopen() 函数是不可能实现的。
为了解决我们上面提出的问题,我们可以使用PHP的扩展库-Curl。这个扩展库通常默认收录在安装包中。你可以用它来获取其他网站的内容,也可以做其他事情。
注意:这两段代码需要php_curl扩展库的支持。检查 phpinfo()。如果启用了 curl 支持,则表示支持 curl 库。
在1、Windows 下打开对 PHP 的 curl 库支持:
打开 php.ini 并删除;在 extension=php_curl.dll 之前。
2、Linux 下的 PHP 开启 curl 库支持:
编译PHP时,在./configure后面加上--with-curl
在这个文章中,我们来看看curl库的使用方法,看看它的其他用途,但接下来,我们将从最基本的用法开始
基本用法:
第一步,我们通过函数curl_init()新建一个curl会话,代码如下:
我们已经成功创建了一个curl会话,如果需要获取一个URL的内容,那么下一步,将一个URL传递给curl_setopt()函数,代码:
上一步完成后,curl的准备工作就完成了,curl会获取URL站点的内容并打印出来。代码:
最后,关闭当前的 curl 会话
让我们看看下面完成的示例代码:
(查看在线演示)
我们刚刚获取了另一个站点的内容并自动将其输出到浏览器。我们还有其他的方式来组织获取的信息,然后控制输出的内容吗?完全没有问题。在curl_setopt()函数的参数中,如果想获取内容但不输出,使用CURLOPT_RETURNTRANSFER参数并设置为非零值/true!,完整代码请看:
(查看在线演示)
在上面的两个例子中,你可能会注意到,通过设置函数 curl_setopt() 的不同参数可以得到不同的结果。这就是 curl 如此强大的原因。下面我们来看看这些参数的含义。
CURL 相关选项:
如果你看过php手册中的curl_setopt()函数,你会注意到它下面有一长串参数,我们无法一一介绍。更多内容请查看PHP手册。这里只介绍常用的。还有一些参数。
第一个有趣的参数是 CURLOPT_FOLLOWLOCATION。当您将此参数设置为 true 时,curl 将根据任何重定向命令获取更深层次的重定向路径。例如:当你尝试获取一个PHP页面时,那么这个PHP页面中有一个跳转代码,curl会获取内容而不是返回跳转代码。完整代码如下:
(查看在线演示),
如果 Google 发送重定向请求,上面的示例将继续根据重定向的 URL 获取内容。与此参数相关的两个选项是 CURLOPT_MAXREDIRS 和 CURLOPT_AUTOREFERER。
参数 CURLOPT_MAXREDIRS 选项允许您定义跳转请求的最大数量,超过该数量将不再检索内容。如果 CURLOPT_AUTOREFERER 设置为 true,curl 将自动在每个重定向链接中添加 Refererheader。它可能不是很重要,但在某些情况下非常有用。
下一步引入的参数是CURLOPT_POST,这是一个非常有用的特性,因为它允许你做POST请求而不是GET请求,这实际上意味着你可以提交
其他形式的页面不需要在表格中填写。以下示例说明了我的意思:
(观看现场演示)
以及 handle_form.php 文件:
如您所见,这使得提交表单变得非常容易,这是一种无需一直填写即可测试所有表单的好方法。
参数 CURLOPT_CONNECTTIMEOUT 通常用于设置 curl 尝试请求链接的时间。这是一个非常重要的选择。如果这个时间设置的太短,可能会导致 curl 请求失败。
但是如果设置的时间太长,PHP 脚本可能会死掉。与此参数相关的一个选项是 CURLOPT_TIMEOUT,用于设置 curl 执行所需的时间。如果设置的太小,可能会导致网页下载不完整,因为下载时间会比较长。
最后一个选项是 CURLOPT_USERAGENT,它允许你自定义请求的客户端名称,例如 webspilder 或 IE6.0.。示例代码如下:
(观看现场演示)
既然我们已经介绍了最有趣的参数之一,让我们介绍一个 curl_getinfo() 函数,看看它可以为我们做什么。
获取页面信息:
函数 curl_getinfo() 允许我们获取接收页面的各种信息。您可以通过设置选项的第二个参数来编辑此信息。也可以以数组的形式传递数组。就像下面的例子:
(观看现场演示)
返回的信息大部分是请求本身,比如:请求所用的时间,返回的头文件信息,当然还有一些页面信息,比如页面内容的大小,最后修改时间.
那些都是关于 curl_getinfo() 函数,现在让我们看看它的实际用途。
实际使用:
curl 库的第一个用途是检查 URL 页面是否存在。我们可以通过查看URL请求返回的代码来判断。例如,404 表示该页面不存在。让我们看一些例子:
(观看现场演示)
其他用户可能会创建一个自动检查器来验证每个请求的页面是否存在。
我们可以使用 curl 库来编写类似于 Google 或其他网络蜘蛛的网络蜘蛛。这个文章不是关于如何写一个网络蜘蛛,所以我们没有谈论任何关于网络蜘蛛的细节,但是在未来PHPit会介绍使用curl来构建一个网络蜘蛛。
结论:
在这个文章 中,我展示了如何在 php 中使用 curl 库及其大部分选项。
对于最基本的任务,你只是想得到一个网页,你可能不需要 CURL 库,但是一旦你想做一些稍微高级的事情,你可能想要使用 curl 库。
在不久的将来,我会告诉你如何构建自己的网络蜘蛛,类似于谷歌的网络蜘蛛,敬请关注phpit。
来自:%D1%DE%D1%F4597122966/blog/item/61b8727b1f1a60fd0ad1872d.html 查看全部
php curl抓取网页(如何使用PHP脚本代码中会的使用_curl代码如下)
配置方法:
1、将PHP目录下的libeay32.dll和ssleay32.dll两个文件复制到system32目录下。
2、Modify php.ini:配置extension_dir,去掉extension=php_curl.dll前的分号。
总结:
在这个文章中,我主要讲解php_curl库的知识,教大家如何更好的使用php_curl。
简介
您在 PHP 脚本代码中可能会遇到这样一个问题:如何从其他站点获取内容?这里有几种解决方案;最简单的就是在php中使用fopen()函数或者fsockopen()函数,但是fopen函数和fsockopen()函数没有足够的参数可以使用,比如当你想搭建一个“网络爬虫”的时候,我要定义爬虫(IE、firefox)的客户端描述,通过不同的请求方式获取内容,如POST、GET;等等。这些要求是用 fopen() 函数和 fsockopen() 函数是不可能实现的。
为了解决我们上面提出的问题,我们可以使用PHP的扩展库-Curl。这个扩展库通常默认收录在安装包中。你可以用它来获取其他网站的内容,也可以做其他事情。
注意:这两段代码需要php_curl扩展库的支持。检查 phpinfo()。如果启用了 curl 支持,则表示支持 curl 库。
在1、Windows 下打开对 PHP 的 curl 库支持:
打开 php.ini 并删除;在 extension=php_curl.dll 之前。
2、Linux 下的 PHP 开启 curl 库支持:
编译PHP时,在./configure后面加上--with-curl
在这个文章中,我们来看看curl库的使用方法,看看它的其他用途,但接下来,我们将从最基本的用法开始
基本用法:
第一步,我们通过函数curl_init()新建一个curl会话,代码如下:
我们已经成功创建了一个curl会话,如果需要获取一个URL的内容,那么下一步,将一个URL传递给curl_setopt()函数,代码:
上一步完成后,curl的准备工作就完成了,curl会获取URL站点的内容并打印出来。代码:
最后,关闭当前的 curl 会话
让我们看看下面完成的示例代码:
(查看在线演示)
我们刚刚获取了另一个站点的内容并自动将其输出到浏览器。我们还有其他的方式来组织获取的信息,然后控制输出的内容吗?完全没有问题。在curl_setopt()函数的参数中,如果想获取内容但不输出,使用CURLOPT_RETURNTRANSFER参数并设置为非零值/true!,完整代码请看:
(查看在线演示)
在上面的两个例子中,你可能会注意到,通过设置函数 curl_setopt() 的不同参数可以得到不同的结果。这就是 curl 如此强大的原因。下面我们来看看这些参数的含义。
CURL 相关选项:
如果你看过php手册中的curl_setopt()函数,你会注意到它下面有一长串参数,我们无法一一介绍。更多内容请查看PHP手册。这里只介绍常用的。还有一些参数。
第一个有趣的参数是 CURLOPT_FOLLOWLOCATION。当您将此参数设置为 true 时,curl 将根据任何重定向命令获取更深层次的重定向路径。例如:当你尝试获取一个PHP页面时,那么这个PHP页面中有一个跳转代码,curl会获取内容而不是返回跳转代码。完整代码如下:
(查看在线演示),
如果 Google 发送重定向请求,上面的示例将继续根据重定向的 URL 获取内容。与此参数相关的两个选项是 CURLOPT_MAXREDIRS 和 CURLOPT_AUTOREFERER。
参数 CURLOPT_MAXREDIRS 选项允许您定义跳转请求的最大数量,超过该数量将不再检索内容。如果 CURLOPT_AUTOREFERER 设置为 true,curl 将自动在每个重定向链接中添加 Refererheader。它可能不是很重要,但在某些情况下非常有用。
下一步引入的参数是CURLOPT_POST,这是一个非常有用的特性,因为它允许你做POST请求而不是GET请求,这实际上意味着你可以提交
其他形式的页面不需要在表格中填写。以下示例说明了我的意思:
(观看现场演示)
以及 handle_form.php 文件:
如您所见,这使得提交表单变得非常容易,这是一种无需一直填写即可测试所有表单的好方法。
参数 CURLOPT_CONNECTTIMEOUT 通常用于设置 curl 尝试请求链接的时间。这是一个非常重要的选择。如果这个时间设置的太短,可能会导致 curl 请求失败。
但是如果设置的时间太长,PHP 脚本可能会死掉。与此参数相关的一个选项是 CURLOPT_TIMEOUT,用于设置 curl 执行所需的时间。如果设置的太小,可能会导致网页下载不完整,因为下载时间会比较长。
最后一个选项是 CURLOPT_USERAGENT,它允许你自定义请求的客户端名称,例如 webspilder 或 IE6.0.。示例代码如下:
(观看现场演示)
既然我们已经介绍了最有趣的参数之一,让我们介绍一个 curl_getinfo() 函数,看看它可以为我们做什么。
获取页面信息:
函数 curl_getinfo() 允许我们获取接收页面的各种信息。您可以通过设置选项的第二个参数来编辑此信息。也可以以数组的形式传递数组。就像下面的例子:
(观看现场演示)
返回的信息大部分是请求本身,比如:请求所用的时间,返回的头文件信息,当然还有一些页面信息,比如页面内容的大小,最后修改时间.
那些都是关于 curl_getinfo() 函数,现在让我们看看它的实际用途。
实际使用:
curl 库的第一个用途是检查 URL 页面是否存在。我们可以通过查看URL请求返回的代码来判断。例如,404 表示该页面不存在。让我们看一些例子:
(观看现场演示)
其他用户可能会创建一个自动检查器来验证每个请求的页面是否存在。
我们可以使用 curl 库来编写类似于 Google 或其他网络蜘蛛的网络蜘蛛。这个文章不是关于如何写一个网络蜘蛛,所以我们没有谈论任何关于网络蜘蛛的细节,但是在未来PHPit会介绍使用curl来构建一个网络蜘蛛。
结论:
在这个文章 中,我展示了如何在 php 中使用 curl 库及其大部分选项。
对于最基本的任务,你只是想得到一个网页,你可能不需要 CURL 库,但是一旦你想做一些稍微高级的事情,你可能想要使用 curl 库。
在不久的将来,我会告诉你如何构建自己的网络蜘蛛,类似于谷歌的网络蜘蛛,敬请关注phpit。
来自:%D1%DE%D1%F4597122966/blog/item/61b8727b1f1a60fd0ad1872d.html
php curl抓取网页(fopentoopenstream:HTTPrequestfailed!错误,解决方法)
网站优化 • 优采云 发表了文章 • 0 个评论 • 78 次浏览 • 2022-03-06 20:00
1、fopen 的使用
代码显示如下:
代码显示如下:
// 以下代码可用于 PHP 5 及以上版本
但是上面的代码很容易出现开流失败:HTTP request failed!错误,解决方法
有人说在php.ini中有两个选项:allow_url_fopen =on(表示可以通过url打开远程文件),user_agent="PHP"(表示使用哪个脚本访问网络,还有一个" ;" 默认在它前面。是的。)重新启动服务器。
但是,有些仍然有此警告信息,距离完美解决方案还有一步之遥。您必须在 php.ini 中设置 user_agent。php默认的user_agent是PHP,我们改成Mozilla/4.0(兼容Mozilla/4.0)。; MSIE 6.0; Windows NT 5.0) 模拟浏览器
<IMG src="http://files.jb51.net/upload/2 ... ot%3B border=0>
user_agent="Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)"
工作中遇到这个问题,完美解决了,分享给大家。
2、由 curl 实现
代码显示如下:
linux下,可以使用以下代码下载
exec("wget {$url}");
PHP抓取外部资源函数fopen/file_get_contents/curl的区别
fopen/file_get_contents 会为每个请求重新做 DNS 查询,并且不缓存 DNS 信息。
但是 CURL 会自动缓存 DNS 信息。对同一域名下的网页或图片的请求只需要一次 DNS 查询。
这大大减少了 DNS 查询的数量。
所以 CURL 的性能比 fopen/file_get_contents 好很多。
脚本之家原创的内容,转载请注明出处。推荐内容:免费高清PNG素材下载 查看全部
php curl抓取网页(fopentoopenstream:HTTPrequestfailed!错误,解决方法)
1、fopen 的使用
代码显示如下:
代码显示如下:
// 以下代码可用于 PHP 5 及以上版本
但是上面的代码很容易出现开流失败:HTTP request failed!错误,解决方法
有人说在php.ini中有两个选项:allow_url_fopen =on(表示可以通过url打开远程文件),user_agent="PHP"(表示使用哪个脚本访问网络,还有一个" ;" 默认在它前面。是的。)重新启动服务器。
但是,有些仍然有此警告信息,距离完美解决方案还有一步之遥。您必须在 php.ini 中设置 user_agent。php默认的user_agent是PHP,我们改成Mozilla/4.0(兼容Mozilla/4.0)。; MSIE 6.0; Windows NT 5.0) 模拟浏览器
<IMG src="http://files.jb51.net/upload/2 ... ot%3B border=0>
user_agent="Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0)"
工作中遇到这个问题,完美解决了,分享给大家。
2、由 curl 实现
代码显示如下:
linux下,可以使用以下代码下载
exec("wget {$url}");
PHP抓取外部资源函数fopen/file_get_contents/curl的区别
fopen/file_get_contents 会为每个请求重新做 DNS 查询,并且不缓存 DNS 信息。
但是 CURL 会自动缓存 DNS 信息。对同一域名下的网页或图片的请求只需要一次 DNS 查询。
这大大减少了 DNS 查询的数量。
所以 CURL 的性能比 fopen/file_get_contents 好很多。
脚本之家原创的内容,转载请注明出处。推荐内容:免费高清PNG素材下载
php curl抓取网页(利用和报告子域错误配置创建一个总体指南(组图))
网站优化 • 优采云 发表了文章 • 0 个评论 • 79 次浏览 • 2022-01-20 16:03
HackerOne 的 Hacktivity 提要 - 公开披露报告的精选提要 - 看到了相当一部分关于子域收购的报告。自从 Detectify 关于子域接管的优秀系列 文章 以来,漏洞赏金行业一直在迅速收到有关此类问题的报告。
子域接管的基本前提是主机指向当前未使用的特定服务,攻击者可以通过在第三方服务上建立帐户来使用该服务在易受攻击的子域上提供内容。作为一名黑客和安全分析师,我每天都在处理这类问题。
我今天的目标是为理解、查找、利用和报告子域错误配置创建一个通用指南。本文假设读者对域名系统 (DNS) 有基本的了解,并且知道如何设置子域。
子域接管简介
如果您以前从未执行过子域接管,或者想要新的介绍,我设计了一个示例场景来帮助您解释基础知识。对于这种情况,我们假设
是目标,并且运行团队有一个错误赏金计划。在枚举属于所有子域时,我们偶然发现
在此过程中,黑客偶然发现了一个指向 GitHub Pages 的子域。我们可以通过查看子域的 DNS 记录来确定这一点;在这个例子中,有多个 A 记录指向 GitHub 自定义页面的私有 IP 地址。
$ host subdomain.example.comsubdomain.example.com has address 192.30.252.153subdomain.example.com has address 192.30.252.154$ whois 192.30.252.153 | grep "OrgName"OrgName: GitHub, Inc.
去的时候,发现如下404错误页面。
在这一点上,大多数黑客的头脑都开始麻木了。这个 404 页面表明顶级目录下没有可用的内容,我们应该尝试将此子域添加到我们的个人 GitHub 存储库。请注意,这并不意味着可以在所有应用程序上进行接管。某些应用程序类型要求您检查 HTTP 和 HTTPS 响应以进行接管,而其他应用程序类型可能根本没有漏洞。
将自定义子域添加到我们的 GitHub 项目后,我们可以看到存储库的内容已被提供——我们已经成功声明了子域。出于演示目的,索引页面现在显示青蛙的图片。
二阶子域接管
二阶子域接管,我想称之为“断开链接劫持”,是易受攻击的子域,不一定属于目标,但用于在目标 网站 上提供内容。
这意味着,例如,资源是通过 JavaScript 块导入到目标页面上的,黑客可以声明要从中导入资源的子域。劫持在页面某处使用的主机最终会导致存储跨站点脚本,因为攻击者可以在目标页面上加载任意客户端代码。
我想在本指南中列出这个问题的原因是为了强调一个事实,作为一名黑客,我不想将自己限制在目标主机上的子域中。您可以通过检查源代码并映射目标所依赖的所有主机来轻松扩展范围。
这也是为什么如果您要劫持子域,值得花时间查看是否有任何页面从子域导入资产。
子域枚举和发现
既然我们对在配置错误的子域上提供内容所需的内容有了一个高级概述,下一步是掌握用于查找易受攻击的子域的各种技术、技巧和工具。
在继续之前,我们必须首先区分抓取和强制,因为这两个过程都可以帮助您发现子域,但结果不同。爬网是一种被动侦察技术,可以使用外部服务和资源来采集属于特定主机的子域。
一些服务,例如 DNS Dumpster 和 VirusTotal,会索引过去爬过的子域,让您可以轻松快速采集和排序结果。
属于 DNS Dumpster 上的子域的结果。
爬取不仅涉及使用索引页面,还记得检查目标的 GIT 存储库、内容安全策略标头、源代码、问题跟踪器等。源列表是无穷无尽的,我不断寻找新的方法来增加我的结果。
通常,您发现自己的技术越独特,您就越有可能最终发现其他人遇到的情况。因此,请根据漏洞披露计划发挥创意并在实践中测试您的想法。
Ahmed Aboul-Ela 的 Sublist3r 可以说是最容易想到的子域抓取工具。这个轻量级 Python 脚本从众多搜索引擎、SSL 证书和 网站(如 DNS Dumpster)采集子域。我的个人电脑上的设置过程非常简单:
当暴力破解子域时,黑客会遍历单词列表并根据响应确定主机是否有效。请注意,始终检查目标是否启用了通配符非常重要,否则您会得到很多误报结果。
通配符只是意味着所有子域都将返回响应,从而扭曲结果。您可以通过请求目标可能未设置的看似随机的主机名来轻松检测通配符。
nbsp;host randomifje8z193hf8jafvh7g4q79gh274.example.com
为了在强制使用子域时获得最佳效果,我建议使用您过去遇到过的或通常与您感兴趣的服务相关联的术语来创建您自己的个人术语列表。例如,我经常发现自己在寻找主机关键字“jira”和“git”收录以下内容,因为有时我会发现易受攻击的 Atlassian Jira 和 GIT 实例。
如果您计划使用暴力破解子域,我强烈建议您查看 Jason Haddix 的单词列表。Jason 无法将子域发现工具中的列表合并为一个扩展列表。
指纹识别
为了增加查找子域的结果,无论您是抓取还是蛮力,您都可以使用一种称为指纹的技术。指纹识别允许您为目标创建自定义词表,并且可以揭示属于使用通用词表无法找到的目标的资产。
著名工具
有许多用于子域接管的工具。本节收录一些迄今为止尚未提及的重要内容。
替代域名
对于递归子域,请查看 Shubham Shah 的 Altdns 脚本。在通过 Altdns 对目标进行指纹识别后运行自定义词表可能非常有益。我喜欢使用 Altdns 生成单词列表,然后通过其他工具运行。
普通话
Shubham 的另一个工具 Commonspeak 是一种使用 Google 的 BigQuery 生成单词列表的工具。目标是生成反映当前趋势的单词列表,这在当今技术不断变化的时代尤为重要。如果您想更好地了解此工具的工作原理以及在哪里采集关键字,则值得一读。
子查找器
SubFinder 是抓取和蛮力的完美结合。我发现自己现在使用 SubFinder 作为通用子域发现工具比 Sublist3r 更多。为了获得更好的结果,请确保收录 SubFinder 为查找子域而抓取的各种服务的 API 密钥。
大数据
Massdns 是一个快速的子域枚举工具。使用某些工具可能需要一刻钟,Massdns 可以在一分钟内完成。请注意,如果您计划运行 Massdns,请确保为其提供有效解析器的列表。看一看,尝试解析器,看看哪个解析器返回最好的结果。如果你不更新解析器列表,你最终会得到很多误报。
$ ./scripts/subbrute.py lists/names.txt example.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt
自动化您的工作流程
在寻找子域接管时,自动化是关键。排名靠前的漏洞赏金猎人不断监控目标的变化,并密切关注他们可以找到的每个子域。对于本指南,我认为没有必要关注监控设置。相反,我想坚持一些简单的技巧,这些技巧可以节省您的时间并易于自动化。
我喜欢自动化的第一个任务是从主机列表中过滤掉实时子域。爬取子域时,部分结果会过期,不再可用;因此,我们需要确定哪些主机处于活动状态。
请记住,正如我们稍后将看到的,不能解析主机并不一定意味着它不能被劫持。这可以通过 host 命令轻松完成 - 不再活动的子域将返回错误。
并读取子域;如果主机 "$subdomain" > /dev/null; 然后 # 如果主机处于活动状态,则将其打印到名为“live.txt”的文件中。echo "$subdomain" >> live.txt fi
结束
因此,如果我们将到目前为止的所有内容放在一起,我们将得到以下工作流程。
特殊情况
我们需要注意一种特殊情况,Frans Rosén 在他的演讲“云提供商的 DNS 劫持 - 无需验证”中强调了一种情况。每当您遇到无效的 DNS 记录时,不要只是假设您无法劫持子域。正如 Frans 所指出的,host 命令可能会返回错误,但运行 dig 会显示过时的记录。
发展
是的,现在您控制了属于目标的子域,下一步是什么?在确定配置错误的子域的合理攻击场景时,了解该子域如何与基本名称和目标的核心服务交互至关重要。
饼干
范围内的cookies是可以修改的。记住这一点很重要,因为这可能允许您劫持受害者的基于基本名称的会话。
从,我们可以为 .
如果基本名称容易受到会话固定的影响,并且使用 HTTPOnly cookie,您可以设置一个 cookie,然后当用户重新启动浏览器时,您的恶意 cookie 将优先于新生成的 cookie,因为 cookie 按年龄排序。
跨域资源共享
跨域资源共享 (CORS) 是一种允许主机跨域共享页面内容的技术。该应用程序使用一组规则创建一个范围,这些规则允许主机提取收录经过身份验证的数据的数据。一些应用程序允许子域在假设子域是可信实体的情况下进行跨域 HTTP 请求。当您劫持子域时,查找 CORS 标头(Burp Suite Pro 的扫描器通常会拾取它们)并查看应用程序是否将子域列入白名单。这可能允许您从主应用程序上经过身份验证的用户那里窃取数据。
Oauth 白名单
与跨域资源共享类似,Oauth 流程也有一个白名单机制,开发人员可以通过该机制指定应该接受的回调 URI。当子域被列入白名单时,这里的危险再次出现,因此您可以在 Oauth 流程期间将用户重定向到您的子域,这可能会泄露他们的 Oauth 令牌。
内容安全政策
内容安全策略 (CSP) 是应用程序信任的另一个主机列表,但这里的目标是限制哪些主机可以在应用程序的上下文中执行客户端代码。如果您想最小化跨站点脚本的影响,此标头特别有用。如果您的子域收录在白名单中,则该子域可用于绕过策略并在应用程序上执行恶意客户端代码。
$ curl -sI https://hackerone.com | grep -i "content-security-policy"content-security-policy: default-src 'none'; base-uri 'self'; block-all-mixed-content; child-src www.youtube-nocookie.com; connect-src 'self' www.google-analytics.com errors.hackerone.net; font-src 'self'; form-action 'self'; frame-ancestors 'none'; img-src 'self' data: cover-photos.hackerone-user-content.com hackathon-photos.hackerone-user-content.com profile-photos.hackerone-user-content.com hackerone-us-west-2-production-attachments.s3-us-west-2.amazonaws.com; media-src 'self' hackerone-us-west-2-production-attachments.s3-us-west-2.amazonaws.com; script-src 'self' www.google-analytics.com;style-src 'self' 'unsafe-inline'; report-uri https://errors.hackerone.net/a ... 1f598
点击劫持
如《Cure53 浏览器安全白皮书》中所述,Internet Explorer、Edge 和 Safari 都支持 header 中的 ALLOW-FROM 指令 X-Frame-Options,这意味着如果您的子域被列入白名单,您可以将目标页面框架为一个点击劫持攻击。
密码管理器
这不一定要收录在报告中,但值得注意的是,一些密码管理器会自动填写属于主应用程序的子域的登录表单。
阻止电子邮件
Rojan Rijal 演示了如何通过在 SendGrid 上声明您所属的子域来拦截电子邮件。
报告子域接管
在尝试报告子域接管之前,请确保您实际上能够在子域上提供内容。但无论你做什么,都不要在索引页面上发布任何内容,即使是前面显示的青蛙的无害图片。最佳做法是在收录 HTML 注释中的秘密消息的隐藏路径中提供 HTML 文件。
当您最初与您的发现联系该程序时,足以证明问题的合理性。只有在团队授予您许可后,您才能尝试升级问题并实际展示此漏洞的整体影响。但是,在大多数情况下,团队应该已经意识到影响,并且您的报告应该收录有关子域接管的可利用性的信息。
花点时间写一份关于子域接管的报告,因为这种类型的问题可能非常有益,而且没有人指望你能击败报告,因为你(希望)是唯一控制子域的人。
作者注:我只目睹了一份关于子域接管的重复报告,因此尽管仍有可能,但这种情况不太可能发生。
我们已经到了本指南的结尾,我期待着在 HackerOne 上对您的子域接管报告进行分类。在寻找子域接管时,请记住练习并应用此 文章 中概述的技术。
关于最后一点,我要感谢 Frans Rosen、FileDescriptor、Mongo 和 Tom Hudson 就子域获取交换了意见。他们的研究是我在整个旅程中发现的许多事情的基础。
文章3810字,约12分钟阅读
翻译自: 查看全部
php curl抓取网页(利用和报告子域错误配置创建一个总体指南(组图))
HackerOne 的 Hacktivity 提要 - 公开披露报告的精选提要 - 看到了相当一部分关于子域收购的报告。自从 Detectify 关于子域接管的优秀系列 文章 以来,漏洞赏金行业一直在迅速收到有关此类问题的报告。
子域接管的基本前提是主机指向当前未使用的特定服务,攻击者可以通过在第三方服务上建立帐户来使用该服务在易受攻击的子域上提供内容。作为一名黑客和安全分析师,我每天都在处理这类问题。
我今天的目标是为理解、查找、利用和报告子域错误配置创建一个通用指南。本文假设读者对域名系统 (DNS) 有基本的了解,并且知道如何设置子域。
子域接管简介
如果您以前从未执行过子域接管,或者想要新的介绍,我设计了一个示例场景来帮助您解释基础知识。对于这种情况,我们假设
是目标,并且运行团队有一个错误赏金计划。在枚举属于所有子域时,我们偶然发现
在此过程中,黑客偶然发现了一个指向 GitHub Pages 的子域。我们可以通过查看子域的 DNS 记录来确定这一点;在这个例子中,有多个 A 记录指向 GitHub 自定义页面的私有 IP 地址。
$ host subdomain.example.comsubdomain.example.com has address 192.30.252.153subdomain.example.com has address 192.30.252.154$ whois 192.30.252.153 | grep "OrgName"OrgName: GitHub, Inc.
去的时候,发现如下404错误页面。
在这一点上,大多数黑客的头脑都开始麻木了。这个 404 页面表明顶级目录下没有可用的内容,我们应该尝试将此子域添加到我们的个人 GitHub 存储库。请注意,这并不意味着可以在所有应用程序上进行接管。某些应用程序类型要求您检查 HTTP 和 HTTPS 响应以进行接管,而其他应用程序类型可能根本没有漏洞。
将自定义子域添加到我们的 GitHub 项目后,我们可以看到存储库的内容已被提供——我们已经成功声明了子域。出于演示目的,索引页面现在显示青蛙的图片。
二阶子域接管
二阶子域接管,我想称之为“断开链接劫持”,是易受攻击的子域,不一定属于目标,但用于在目标 网站 上提供内容。
这意味着,例如,资源是通过 JavaScript 块导入到目标页面上的,黑客可以声明要从中导入资源的子域。劫持在页面某处使用的主机最终会导致存储跨站点脚本,因为攻击者可以在目标页面上加载任意客户端代码。
我想在本指南中列出这个问题的原因是为了强调一个事实,作为一名黑客,我不想将自己限制在目标主机上的子域中。您可以通过检查源代码并映射目标所依赖的所有主机来轻松扩展范围。
这也是为什么如果您要劫持子域,值得花时间查看是否有任何页面从子域导入资产。
子域枚举和发现
既然我们对在配置错误的子域上提供内容所需的内容有了一个高级概述,下一步是掌握用于查找易受攻击的子域的各种技术、技巧和工具。
在继续之前,我们必须首先区分抓取和强制,因为这两个过程都可以帮助您发现子域,但结果不同。爬网是一种被动侦察技术,可以使用外部服务和资源来采集属于特定主机的子域。
一些服务,例如 DNS Dumpster 和 VirusTotal,会索引过去爬过的子域,让您可以轻松快速采集和排序结果。
属于 DNS Dumpster 上的子域的结果。
爬取不仅涉及使用索引页面,还记得检查目标的 GIT 存储库、内容安全策略标头、源代码、问题跟踪器等。源列表是无穷无尽的,我不断寻找新的方法来增加我的结果。
通常,您发现自己的技术越独特,您就越有可能最终发现其他人遇到的情况。因此,请根据漏洞披露计划发挥创意并在实践中测试您的想法。
Ahmed Aboul-Ela 的 Sublist3r 可以说是最容易想到的子域抓取工具。这个轻量级 Python 脚本从众多搜索引擎、SSL 证书和 网站(如 DNS Dumpster)采集子域。我的个人电脑上的设置过程非常简单:
当暴力破解子域时,黑客会遍历单词列表并根据响应确定主机是否有效。请注意,始终检查目标是否启用了通配符非常重要,否则您会得到很多误报结果。
通配符只是意味着所有子域都将返回响应,从而扭曲结果。您可以通过请求目标可能未设置的看似随机的主机名来轻松检测通配符。
nbsp;host randomifje8z193hf8jafvh7g4q79gh274.example.com
为了在强制使用子域时获得最佳效果,我建议使用您过去遇到过的或通常与您感兴趣的服务相关联的术语来创建您自己的个人术语列表。例如,我经常发现自己在寻找主机关键字“jira”和“git”收录以下内容,因为有时我会发现易受攻击的 Atlassian Jira 和 GIT 实例。
如果您计划使用暴力破解子域,我强烈建议您查看 Jason Haddix 的单词列表。Jason 无法将子域发现工具中的列表合并为一个扩展列表。
指纹识别
为了增加查找子域的结果,无论您是抓取还是蛮力,您都可以使用一种称为指纹的技术。指纹识别允许您为目标创建自定义词表,并且可以揭示属于使用通用词表无法找到的目标的资产。
著名工具
有许多用于子域接管的工具。本节收录一些迄今为止尚未提及的重要内容。
替代域名
对于递归子域,请查看 Shubham Shah 的 Altdns 脚本。在通过 Altdns 对目标进行指纹识别后运行自定义词表可能非常有益。我喜欢使用 Altdns 生成单词列表,然后通过其他工具运行。
普通话
Shubham 的另一个工具 Commonspeak 是一种使用 Google 的 BigQuery 生成单词列表的工具。目标是生成反映当前趋势的单词列表,这在当今技术不断变化的时代尤为重要。如果您想更好地了解此工具的工作原理以及在哪里采集关键字,则值得一读。
子查找器
SubFinder 是抓取和蛮力的完美结合。我发现自己现在使用 SubFinder 作为通用子域发现工具比 Sublist3r 更多。为了获得更好的结果,请确保收录 SubFinder 为查找子域而抓取的各种服务的 API 密钥。
大数据
Massdns 是一个快速的子域枚举工具。使用某些工具可能需要一刻钟,Massdns 可以在一分钟内完成。请注意,如果您计划运行 Massdns,请确保为其提供有效解析器的列表。看一看,尝试解析器,看看哪个解析器返回最好的结果。如果你不更新解析器列表,你最终会得到很多误报。
$ ./scripts/subbrute.py lists/names.txt example.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt
自动化您的工作流程
在寻找子域接管时,自动化是关键。排名靠前的漏洞赏金猎人不断监控目标的变化,并密切关注他们可以找到的每个子域。对于本指南,我认为没有必要关注监控设置。相反,我想坚持一些简单的技巧,这些技巧可以节省您的时间并易于自动化。
我喜欢自动化的第一个任务是从主机列表中过滤掉实时子域。爬取子域时,部分结果会过期,不再可用;因此,我们需要确定哪些主机处于活动状态。
请记住,正如我们稍后将看到的,不能解析主机并不一定意味着它不能被劫持。这可以通过 host 命令轻松完成 - 不再活动的子域将返回错误。
并读取子域;如果主机 "$subdomain" > /dev/null; 然后 # 如果主机处于活动状态,则将其打印到名为“live.txt”的文件中。echo "$subdomain" >> live.txt fi
结束
因此,如果我们将到目前为止的所有内容放在一起,我们将得到以下工作流程。
特殊情况
我们需要注意一种特殊情况,Frans Rosén 在他的演讲“云提供商的 DNS 劫持 - 无需验证”中强调了一种情况。每当您遇到无效的 DNS 记录时,不要只是假设您无法劫持子域。正如 Frans 所指出的,host 命令可能会返回错误,但运行 dig 会显示过时的记录。
发展
是的,现在您控制了属于目标的子域,下一步是什么?在确定配置错误的子域的合理攻击场景时,了解该子域如何与基本名称和目标的核心服务交互至关重要。
饼干
范围内的cookies是可以修改的。记住这一点很重要,因为这可能允许您劫持受害者的基于基本名称的会话。
从,我们可以为 .
如果基本名称容易受到会话固定的影响,并且使用 HTTPOnly cookie,您可以设置一个 cookie,然后当用户重新启动浏览器时,您的恶意 cookie 将优先于新生成的 cookie,因为 cookie 按年龄排序。
跨域资源共享
跨域资源共享 (CORS) 是一种允许主机跨域共享页面内容的技术。该应用程序使用一组规则创建一个范围,这些规则允许主机提取收录经过身份验证的数据的数据。一些应用程序允许子域在假设子域是可信实体的情况下进行跨域 HTTP 请求。当您劫持子域时,查找 CORS 标头(Burp Suite Pro 的扫描器通常会拾取它们)并查看应用程序是否将子域列入白名单。这可能允许您从主应用程序上经过身份验证的用户那里窃取数据。
Oauth 白名单
与跨域资源共享类似,Oauth 流程也有一个白名单机制,开发人员可以通过该机制指定应该接受的回调 URI。当子域被列入白名单时,这里的危险再次出现,因此您可以在 Oauth 流程期间将用户重定向到您的子域,这可能会泄露他们的 Oauth 令牌。
内容安全政策
内容安全策略 (CSP) 是应用程序信任的另一个主机列表,但这里的目标是限制哪些主机可以在应用程序的上下文中执行客户端代码。如果您想最小化跨站点脚本的影响,此标头特别有用。如果您的子域收录在白名单中,则该子域可用于绕过策略并在应用程序上执行恶意客户端代码。
$ curl -sI https://hackerone.com | grep -i "content-security-policy"content-security-policy: default-src 'none'; base-uri 'self'; block-all-mixed-content; child-src www.youtube-nocookie.com; connect-src 'self' www.google-analytics.com errors.hackerone.net; font-src 'self'; form-action 'self'; frame-ancestors 'none'; img-src 'self' data: cover-photos.hackerone-user-content.com hackathon-photos.hackerone-user-content.com profile-photos.hackerone-user-content.com hackerone-us-west-2-production-attachments.s3-us-west-2.amazonaws.com; media-src 'self' hackerone-us-west-2-production-attachments.s3-us-west-2.amazonaws.com; script-src 'self' www.google-analytics.com;style-src 'self' 'unsafe-inline'; report-uri https://errors.hackerone.net/a ... 1f598
点击劫持
如《Cure53 浏览器安全白皮书》中所述,Internet Explorer、Edge 和 Safari 都支持 header 中的 ALLOW-FROM 指令 X-Frame-Options,这意味着如果您的子域被列入白名单,您可以将目标页面框架为一个点击劫持攻击。
密码管理器
这不一定要收录在报告中,但值得注意的是,一些密码管理器会自动填写属于主应用程序的子域的登录表单。
阻止电子邮件
Rojan Rijal 演示了如何通过在 SendGrid 上声明您所属的子域来拦截电子邮件。
报告子域接管
在尝试报告子域接管之前,请确保您实际上能够在子域上提供内容。但无论你做什么,都不要在索引页面上发布任何内容,即使是前面显示的青蛙的无害图片。最佳做法是在收录 HTML 注释中的秘密消息的隐藏路径中提供 HTML 文件。
当您最初与您的发现联系该程序时,足以证明问题的合理性。只有在团队授予您许可后,您才能尝试升级问题并实际展示此漏洞的整体影响。但是,在大多数情况下,团队应该已经意识到影响,并且您的报告应该收录有关子域接管的可利用性的信息。
花点时间写一份关于子域接管的报告,因为这种类型的问题可能非常有益,而且没有人指望你能击败报告,因为你(希望)是唯一控制子域的人。
作者注:我只目睹了一份关于子域接管的重复报告,因此尽管仍有可能,但这种情况不太可能发生。
我们已经到了本指南的结尾,我期待着在 HackerOne 上对您的子域接管报告进行分类。在寻找子域接管时,请记住练习并应用此 文章 中概述的技术。
关于最后一点,我要感谢 Frans Rosen、FileDescriptor、Mongo 和 Tom Hudson 就子域获取交换了意见。他们的研究是我在整个旅程中发现的许多事情的基础。
文章3810字,约12分钟阅读
翻译自:
php curl抓取网页(什么是网络爬虫?PHP和Python都写过爬虫和提取程序)
网站优化 • 优采云 发表了文章 • 0 个评论 • 100 次浏览 • 2021-12-28 23:05
什么是网络爬虫?
网络爬虫是一种自动提取网页的程序。它从万维网上下载网页供搜索引擎使用,是搜索引擎的重要组成部分。传统爬虫从一个或多个初始网页的网址开始,获取初始网页上的网址。在爬取网页的过程中,他们不断地从当前页面中提取新的URL并将它们放入队列中,直到满足系统的某个停止条件。
爬虫有什么用?
很多语言都可以用来编写爬虫,比如Java、PHP、Python等。每个都有自己的优点和缺点。
PHP 和 Python 都编写了爬虫和文本提取程序。
一开始用PHP,所以说一下PHP的优点:
1. 语言比较简单,PHP是一门很随意的语言。写起来很容易,这样你就可以专注于你想做的事情,而不是各种语法规则等等。
2. 各种功能模块齐全,这里分两部分:
1.网页下载:curl等扩展库;
2. 文档解析:dom、xpath、tidy、各种转码工具,可能与题主的不同。我的爬虫需要提取文本,所以需要非常复杂的文本处理,所以很方便 文本处理工具是我的大爱。;
简而言之,它很容易上手。
缺点:
1. 并发处理能力弱:由于当时PHP没有线程和进程功能,如果要实现并发,就需要借用多服务模型。PHP 使用选择模型。实现起来比较麻烦,可能是因为级别的问题,我的程序中经常会出现一些错误,导致miss catch。
让我们谈谈Python:
优势:
1.各种爬虫框架,方便高效的下载网页;
2.多线程,成熟稳定的进程模型,爬虫是典型的多任务场景,请求一个页面的时候会有很长的延迟,一般来说等待比较多。多线程或进程将优化程序的效率,提高整个系统的下载和分析能力。
3.GAE 支持。我写爬虫的时候只有GAE,而且只支持Python。用 GAE 创建的爬虫几乎是免费的。最多,我有将近一千个应用程序示例在工作。
缺点:
1. 对非标准HTML的适应性差:比如一个页面中同时有GB18030字符集中的中文和UTF-8字符集中的中文,Python处理就没有PHP那么简单了,你需要自己做很多判断工作。当然这在提取文本的时候就麻烦了。
当时还检查了 Java 和 C++。它们比脚本语言更麻烦,所以我放弃了。
总之,如果你开发一种小型爬虫脚本语言,它在各方面都是一种优势语言。如果你想开发一个复杂的爬虫系统,Java可能是一个附加选项,而C++我认为写一个模块更合适。对于爬虫系统来说,下载和内容分析只是两个基本功能。一个真正好的系统还包括完整的任务调度、监控、存储、页面数据存储和更新逻辑、重新加载等。Crawler是一个消耗带宽的应用,一个好的设计会节省大量的带宽和服务器资源,好坏差距很大。
全面的
写爬虫就是边测试边写。但是考试改了。这个过程用python写最方便。
而python相关的库也是最方便的。有request、jieba、redis、gevent、NLTK、lxml、pyquery、BeautifulSoup、Pillow。最简单的爬虫和极其复杂的爬虫都可以轻松处理。 查看全部
php curl抓取网页(什么是网络爬虫?PHP和Python都写过爬虫和提取程序)
什么是网络爬虫?
网络爬虫是一种自动提取网页的程序。它从万维网上下载网页供搜索引擎使用,是搜索引擎的重要组成部分。传统爬虫从一个或多个初始网页的网址开始,获取初始网页上的网址。在爬取网页的过程中,他们不断地从当前页面中提取新的URL并将它们放入队列中,直到满足系统的某个停止条件。
爬虫有什么用?
很多语言都可以用来编写爬虫,比如Java、PHP、Python等。每个都有自己的优点和缺点。
PHP 和 Python 都编写了爬虫和文本提取程序。
一开始用PHP,所以说一下PHP的优点:
1. 语言比较简单,PHP是一门很随意的语言。写起来很容易,这样你就可以专注于你想做的事情,而不是各种语法规则等等。
2. 各种功能模块齐全,这里分两部分:
1.网页下载:curl等扩展库;
2. 文档解析:dom、xpath、tidy、各种转码工具,可能与题主的不同。我的爬虫需要提取文本,所以需要非常复杂的文本处理,所以很方便 文本处理工具是我的大爱。;
简而言之,它很容易上手。
缺点:
1. 并发处理能力弱:由于当时PHP没有线程和进程功能,如果要实现并发,就需要借用多服务模型。PHP 使用选择模型。实现起来比较麻烦,可能是因为级别的问题,我的程序中经常会出现一些错误,导致miss catch。
让我们谈谈Python:
优势:
1.各种爬虫框架,方便高效的下载网页;
2.多线程,成熟稳定的进程模型,爬虫是典型的多任务场景,请求一个页面的时候会有很长的延迟,一般来说等待比较多。多线程或进程将优化程序的效率,提高整个系统的下载和分析能力。
3.GAE 支持。我写爬虫的时候只有GAE,而且只支持Python。用 GAE 创建的爬虫几乎是免费的。最多,我有将近一千个应用程序示例在工作。
缺点:
1. 对非标准HTML的适应性差:比如一个页面中同时有GB18030字符集中的中文和UTF-8字符集中的中文,Python处理就没有PHP那么简单了,你需要自己做很多判断工作。当然这在提取文本的时候就麻烦了。
当时还检查了 Java 和 C++。它们比脚本语言更麻烦,所以我放弃了。
总之,如果你开发一种小型爬虫脚本语言,它在各方面都是一种优势语言。如果你想开发一个复杂的爬虫系统,Java可能是一个附加选项,而C++我认为写一个模块更合适。对于爬虫系统来说,下载和内容分析只是两个基本功能。一个真正好的系统还包括完整的任务调度、监控、存储、页面数据存储和更新逻辑、重新加载等。Crawler是一个消耗带宽的应用,一个好的设计会节省大量的带宽和服务器资源,好坏差距很大。
全面的
写爬虫就是边测试边写。但是考试改了。这个过程用python写最方便。
而python相关的库也是最方便的。有request、jieba、redis、gevent、NLTK、lxml、pyquery、BeautifulSoup、Pillow。最简单的爬虫和极其复杂的爬虫都可以轻松处理。
php curl抓取网页(并教你如何更好的使用php_curl库的知识,并教)
网站优化 • 优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2021-11-13 07:15
概括:
在这个文章中,我们主要讲解php_curl库的知识,教大家更好的使用php_curl。
介绍
您在 PHP 脚本代码中可能会遇到这样一个问题:如何从其他站点获取内容?这里有几种解决方案;最简单的就是在php中使用fopen()函数,但是fopen函数没有足够的参数可以使用。例如,当你想构建一个“网络爬虫”时,你想定义爬虫的客户端描述(IE,firefox),通过不同的请求方式获取内容,如POST、GET;等。这些要求是不可能用 fopen() 函数实现的。
为了解决我们上面提出的问题,我们可以使用PHP的扩展库-Curl。这个扩展库通常默认收录在安装包中。您可以使用它来获取其他网站的内容或做其他事情。
注意:这两段代码需要php_curl扩展库的支持。检查 phpinfo()。如果启用了 curl 支持,则表示支持 curl 库。
1、Windows下PHP开启curl库支持:
打开 php.ini 并删除;在 extension=php_curl.dll 之前。
2、Linux下PHP开启curl库支持:
编译PHP时在./configure后面添加--with-curl
在这个文章中,我们来看看curl库的使用方法,看看它的其他用途,但接下来,我们将从最基本的用法开始
基本用法:
第一步,我们通过函数curl_init()新建一个curl会话,代码如下:
我们已经成功创建了一个 curl 会话。如果需要获取一个 URL 的内容,那么下一步就是将 URL 传递给 curl_setopt() 函数,代码:
上一步完成后,curl的准备工作就完成了,curl会获取URL站点的内容并打印出来。代码:
最后,关闭当前的 curl 会话
我们来看一下完成的示例代码:
(查看在线演示)
我们刚刚获取了另一个站点的内容,并自动将其输出到浏览器。我们还有其他的方式来组织获取的信息,然后控制输出的内容吗?完全没有问题。在curl_setopt()函数的参数中,如果想获取内容但不输出,使用CURLOPT_RETURNTRANSFER参数并设置为非零值/true!,完整代码请看:
(查看在线演示)
在上面的两个例子中,你可能会注意到,通过设置函数 curl_setopt() 的不同参数可以得到不同的结果。这就是 curl 如此强大的原因。下面我们来看看这些参数的含义。
CURL 的相关选项:
如果你看过php手册中的curl_setopt()函数,你会注意到它下面有一长串参数,我们无法一一介绍。更多内容请查看PHP手册。这里我们只介绍常用的和一些参数。
第一个有趣的参数是 CURLOPT_FOLLOWLOCATION。当您将此参数设置为 true 时,curl 将根据任何重定向命令获得更深的重定向路径。例如:当你尝试获取一个PHP页面时,那么这个PHP页面中有跳转代码,curl会获取内容而不是返回跳转代码。完整代码如下:
(查看在线演示),
如果 Google 发送重定向请求,上面的示例将继续根据重定向的 URL 获取内容。与此参数相关的两个选项是 CURLOPT_MAXREDIRS 和 CURLOPT_AUTOREFERER。
参数 CURLOPT_MAXREDIRS 选项允许您定义跳转请求的最大数量,超过该数量将不再检索内容。如果 CURLOPT_AUTOREFERER 设置为 true,curl 将自动将 Referer 标头添加到每个重定向链接。它可能不是很重要,但在某些情况下非常有用。
下一步引入的参数是 CURLOPT_POST,这是一个非常有用的特性,因为它允许你做 POST 请求而不是 GET 请求,这实际上意味着你可以提交
对于其他形式的页面,无需实际填写表格。以下示例显示了我的意思:
(查看现场演示)
和 handle_form.php 文件:
如您所见,这使得提交表单变得非常容易,这是一种无需一直填写即可测试所有表单的好方法。
参数 CURLOPT_CONNECTTIMEOUT 通常用于设置 curl 尝试请求链接的时间。这是一个非常重要的选择。如果这个时间设置的太短,可能会导致 curl 请求失败。
但是如果设置的时间太长,PHP 脚本可能会死掉。与此参数相关的一个选项是 CURLOPT_TIMEOUT,用于设置 curl 执行所需的时间。如果将此值设置为很小的值,可能会导致网页下载不完整,因为下载需要一段时间。
最后一个选项是CURLOPT_USERAGENT,可以自定义请求的客户端名称,比如webspilder或者IE6.0.,示例代码如下:
(查看现场演示)
现在我们已经介绍了最有趣的参数之一,让我们介绍一个 curl_getinfo() 函数,看看它可以为我们做什么。
获取页面信息:
函数 curl_getinfo() 允许我们获取接收页面的各种信息。您可以通过设置选项的第二个参数来编辑此信息。也可以以数组的形式传递数组。就像下面的例子:
(查看现场演示)
返回的信息大部分是请求本身,比如:请求所用的时间,返回的头文件信息,当然还有一些页面信息,比如页面内容的大小,最后修改时间等。
这些都是关于 curl_getinfo() 函数,现在让我们看看它的实际用途。
真正的功能:
curl 库的第一个用途是检查 URL 页面是否存在。我们可以通过查看URL请求返回的代码来判断。例如,404 表示该页面不存在。让我们看一些例子:
(查看现场演示)
其他用户可能会创建一个自动检查器来验证每个请求页面的存在。
我们可以使用 curl 库来编写类似于 Google 的网络蜘蛛,或者其他网络蜘蛛。这篇文章文章不是关于如何写一个网络蜘蛛,所以我们没有谈论任何关于网络蜘蛛的细节,但是PHPit将来会介绍使用curl来构建一个网络蜘蛛。
综上所述:
在这个 文章 中,我展示了如何在 php 中使用 curl 库及其大部分选项。
对于最基本的任务,只想获取一个网页,你可能不需要 CURL 库,但是一旦你想做一些稍微高级的事情,你可能想要使用 curl 库。
在不久的将来,我会告诉你如何构建自己的网络蜘蛛,类似于谷歌的网络蜘蛛,敬请关注phpit。
转载于: 查看全部
php curl抓取网页(并教你如何更好的使用php_curl库的知识,并教)
概括:
在这个文章中,我们主要讲解php_curl库的知识,教大家更好的使用php_curl。
介绍
您在 PHP 脚本代码中可能会遇到这样一个问题:如何从其他站点获取内容?这里有几种解决方案;最简单的就是在php中使用fopen()函数,但是fopen函数没有足够的参数可以使用。例如,当你想构建一个“网络爬虫”时,你想定义爬虫的客户端描述(IE,firefox),通过不同的请求方式获取内容,如POST、GET;等。这些要求是不可能用 fopen() 函数实现的。
为了解决我们上面提出的问题,我们可以使用PHP的扩展库-Curl。这个扩展库通常默认收录在安装包中。您可以使用它来获取其他网站的内容或做其他事情。
注意:这两段代码需要php_curl扩展库的支持。检查 phpinfo()。如果启用了 curl 支持,则表示支持 curl 库。
1、Windows下PHP开启curl库支持:
打开 php.ini 并删除;在 extension=php_curl.dll 之前。
2、Linux下PHP开启curl库支持:
编译PHP时在./configure后面添加--with-curl
在这个文章中,我们来看看curl库的使用方法,看看它的其他用途,但接下来,我们将从最基本的用法开始
基本用法:
第一步,我们通过函数curl_init()新建一个curl会话,代码如下:
我们已经成功创建了一个 curl 会话。如果需要获取一个 URL 的内容,那么下一步就是将 URL 传递给 curl_setopt() 函数,代码:
上一步完成后,curl的准备工作就完成了,curl会获取URL站点的内容并打印出来。代码:
最后,关闭当前的 curl 会话
我们来看一下完成的示例代码:
(查看在线演示)
我们刚刚获取了另一个站点的内容,并自动将其输出到浏览器。我们还有其他的方式来组织获取的信息,然后控制输出的内容吗?完全没有问题。在curl_setopt()函数的参数中,如果想获取内容但不输出,使用CURLOPT_RETURNTRANSFER参数并设置为非零值/true!,完整代码请看:
(查看在线演示)
在上面的两个例子中,你可能会注意到,通过设置函数 curl_setopt() 的不同参数可以得到不同的结果。这就是 curl 如此强大的原因。下面我们来看看这些参数的含义。
CURL 的相关选项:
如果你看过php手册中的curl_setopt()函数,你会注意到它下面有一长串参数,我们无法一一介绍。更多内容请查看PHP手册。这里我们只介绍常用的和一些参数。
第一个有趣的参数是 CURLOPT_FOLLOWLOCATION。当您将此参数设置为 true 时,curl 将根据任何重定向命令获得更深的重定向路径。例如:当你尝试获取一个PHP页面时,那么这个PHP页面中有跳转代码,curl会获取内容而不是返回跳转代码。完整代码如下:
(查看在线演示),
如果 Google 发送重定向请求,上面的示例将继续根据重定向的 URL 获取内容。与此参数相关的两个选项是 CURLOPT_MAXREDIRS 和 CURLOPT_AUTOREFERER。
参数 CURLOPT_MAXREDIRS 选项允许您定义跳转请求的最大数量,超过该数量将不再检索内容。如果 CURLOPT_AUTOREFERER 设置为 true,curl 将自动将 Referer 标头添加到每个重定向链接。它可能不是很重要,但在某些情况下非常有用。
下一步引入的参数是 CURLOPT_POST,这是一个非常有用的特性,因为它允许你做 POST 请求而不是 GET 请求,这实际上意味着你可以提交
对于其他形式的页面,无需实际填写表格。以下示例显示了我的意思:
(查看现场演示)
和 handle_form.php 文件:
如您所见,这使得提交表单变得非常容易,这是一种无需一直填写即可测试所有表单的好方法。
参数 CURLOPT_CONNECTTIMEOUT 通常用于设置 curl 尝试请求链接的时间。这是一个非常重要的选择。如果这个时间设置的太短,可能会导致 curl 请求失败。
但是如果设置的时间太长,PHP 脚本可能会死掉。与此参数相关的一个选项是 CURLOPT_TIMEOUT,用于设置 curl 执行所需的时间。如果将此值设置为很小的值,可能会导致网页下载不完整,因为下载需要一段时间。
最后一个选项是CURLOPT_USERAGENT,可以自定义请求的客户端名称,比如webspilder或者IE6.0.,示例代码如下:
(查看现场演示)
现在我们已经介绍了最有趣的参数之一,让我们介绍一个 curl_getinfo() 函数,看看它可以为我们做什么。
获取页面信息:
函数 curl_getinfo() 允许我们获取接收页面的各种信息。您可以通过设置选项的第二个参数来编辑此信息。也可以以数组的形式传递数组。就像下面的例子:
(查看现场演示)
返回的信息大部分是请求本身,比如:请求所用的时间,返回的头文件信息,当然还有一些页面信息,比如页面内容的大小,最后修改时间等。
这些都是关于 curl_getinfo() 函数,现在让我们看看它的实际用途。
真正的功能:
curl 库的第一个用途是检查 URL 页面是否存在。我们可以通过查看URL请求返回的代码来判断。例如,404 表示该页面不存在。让我们看一些例子:
(查看现场演示)
其他用户可能会创建一个自动检查器来验证每个请求页面的存在。
我们可以使用 curl 库来编写类似于 Google 的网络蜘蛛,或者其他网络蜘蛛。这篇文章文章不是关于如何写一个网络蜘蛛,所以我们没有谈论任何关于网络蜘蛛的细节,但是PHPit将来会介绍使用curl来构建一个网络蜘蛛。
综上所述:
在这个 文章 中,我展示了如何在 php 中使用 curl 库及其大部分选项。
对于最基本的任务,只想获取一个网页,你可能不需要 CURL 库,但是一旦你想做一些稍微高级的事情,你可能想要使用 curl 库。
在不久的将来,我会告诉你如何构建自己的网络蜘蛛,类似于谷歌的网络蜘蛛,敬请关注phpit。
转载于:
php curl抓取网页(比较,结合实例形式详细分析了curl_init()和curl)
网站优化 • 优采云 发表了文章 • 0 个评论 • 72 次浏览 • 2021-10-16 13:33
本文文章主要介绍php使用curl_init()和curl_multi_init()多线程的速度对比,并结合curl_init()和curl_multi_init()的具体使用方法及相关效率对比进行详细分析示例表格。有需要的朋友可以参考
本文介绍了 PHP 使用 curl_init() 和 curl_multi_init() 多线程的速度对比。分享给大家,供大家参考,如下:
php中curl_init()的作用很棒,尤其是在爬取网页内容或者文件信息的时候。比如之前的文章《》介绍了curl_init()的强大。
curl_init() 以单线程模式处理事情。如果需要使用多线程模式进行事务处理,那么php为我们提供了一个函数curl_multi_init(),就是多线程模式处理事务的功能。
curl_init() 和 curl_multi_init() 速度对比
curl_multi_init() 多线程可以提高网页的处理速度吗?今天我将通过实验来验证这个问题。
我今天的测试很简单,就是抓取网页内容,连续抓取5次,分别使用curl_init()和curl_multi_init()函数来完成,记录下两者的耗时,将它们进行比较得出结论。
首先,使用 curl_init() 在单个线程中抓取网页内容 5 次。
程序代码如下:
然后,使用 curl_multi_init() 多线程连续抓取网页内容 5 次。
代码显示如下:
<p> 查看全部
php curl抓取网页(比较,结合实例形式详细分析了curl_init()和curl)
本文文章主要介绍php使用curl_init()和curl_multi_init()多线程的速度对比,并结合curl_init()和curl_multi_init()的具体使用方法及相关效率对比进行详细分析示例表格。有需要的朋友可以参考
本文介绍了 PHP 使用 curl_init() 和 curl_multi_init() 多线程的速度对比。分享给大家,供大家参考,如下:
php中curl_init()的作用很棒,尤其是在爬取网页内容或者文件信息的时候。比如之前的文章《》介绍了curl_init()的强大。
curl_init() 以单线程模式处理事情。如果需要使用多线程模式进行事务处理,那么php为我们提供了一个函数curl_multi_init(),就是多线程模式处理事务的功能。
curl_init() 和 curl_multi_init() 速度对比
curl_multi_init() 多线程可以提高网页的处理速度吗?今天我将通过实验来验证这个问题。
我今天的测试很简单,就是抓取网页内容,连续抓取5次,分别使用curl_init()和curl_multi_init()函数来完成,记录下两者的耗时,将它们进行比较得出结论。
首先,使用 curl_init() 在单个线程中抓取网页内容 5 次。
程序代码如下:
然后,使用 curl_multi_init() 多线程连续抓取网页内容 5 次。
代码显示如下:
<p>
php curl抓取网页( 远程网页内容的php代码,做小偷采集程序的程序经常用得到)
网站优化 • 优采云 发表了文章 • 0 个评论 • 123 次浏览 • 2021-09-17 12:02
远程网页内容的php代码,做小偷采集程序的程序经常用得到)
获取远程网页内容的PHP代码(fopen,经过测试)
更新时间:2011年6月6日09:05:33作者:
获取远程网页内容的PHP代码通常用作小偷采集程序。现在卷曲被更多地使用
1、fopen使用
副本代码如下:
副本代码如下:
//对于PHP5和更高版本,可以使用以下代码
但是上面的代码很容易打开流失败:http请求失败!错误、解决方案
有人说,在php.ini中,有两个选项:allow_url_ufopen=on(表示可以通过url打开远程文件),user_Agent=“php”(表示使用哪个脚本访问网络。默认情况下,前面有一个“;”,只需删除它)重新启动服务器
然而,有些人仍然有这个警告信息。离完美解决方案还有一步之遥。您必须在php.ini u代理中设置用户,php默认用户u代理是php,我们将其更改为Mozilla/4.0(兼容;MSIE6.0;Windows NT5.0)以模拟浏览器
<IMG src="/upload/201106/20110606090106493.gif" border=0>
user\u agent=“Mozilla/4.0(兼容;MSIE6.0;Windows NT5.0)”
我在工作中遇到了这个问题,并完美地解决了它,因此我将与您分享
2、由curl实现
副本代码如下:
在Linux下,您可以使用以下代码下载
exec(“wget{$url}”)
PHP获取外部资源函数fopen/file\u get\u contents/curl
Fopen/file\u get\u内容每次请求都会重复DNS查询,并且不会缓存DNS信息
但是,curl将自动缓存DNS信息。对同一域名下的网页或图片的请求只需要一个DNS查询
这大大减少了DNS查询的数量
因此,curl的性能远远优于fopen/file\u get\u contents 查看全部
php curl抓取网页(
远程网页内容的php代码,做小偷采集程序的程序经常用得到)
获取远程网页内容的PHP代码(fopen,经过测试)
更新时间:2011年6月6日09:05:33作者:
获取远程网页内容的PHP代码通常用作小偷采集程序。现在卷曲被更多地使用
1、fopen使用
副本代码如下:
副本代码如下:
//对于PHP5和更高版本,可以使用以下代码
但是上面的代码很容易打开流失败:http请求失败!错误、解决方案
有人说,在php.ini中,有两个选项:allow_url_ufopen=on(表示可以通过url打开远程文件),user_Agent=“php”(表示使用哪个脚本访问网络。默认情况下,前面有一个“;”,只需删除它)重新启动服务器
然而,有些人仍然有这个警告信息。离完美解决方案还有一步之遥。您必须在php.ini u代理中设置用户,php默认用户u代理是php,我们将其更改为Mozilla/4.0(兼容;MSIE6.0;Windows NT5.0)以模拟浏览器
<IMG src="/upload/201106/20110606090106493.gif" border=0>
user\u agent=“Mozilla/4.0(兼容;MSIE6.0;Windows NT5.0)”
我在工作中遇到了这个问题,并完美地解决了它,因此我将与您分享
2、由curl实现
副本代码如下:
在Linux下,您可以使用以下代码下载
exec(“wget{$url}”)
PHP获取外部资源函数fopen/file\u get\u contents/curl
Fopen/file\u get\u内容每次请求都会重复DNS查询,并且不会缓存DNS信息
但是,curl将自动缓存DNS信息。对同一域名下的网页或图片的请求只需要一个DNS查询
这大大减少了DNS查询的数量
因此,curl的性能远远优于fopen/file\u get\u contents
php curl抓取网页(如何使用PHP脚本代码中会的使用_curl代码如下)
网站优化 • 优采云 发表了文章 • 0 个评论 • 109 次浏览 • 2021-09-10 08:04
配置方法:
1、将PHP目录下的libeay32.dll和ssleay32.dll两个文件复制到system32目录下。
2、Modify php.ini:配置extension_dir,去掉extension=php_curl.dll前的分号。
总结:
在这个文章中,我主要讲解php_curl库的知识,教大家如何更好的使用php_curl。
简介
您在 PHP 脚本代码中可能会遇到这样一个问题:如何从其他站点获取内容?这里有几种解决方案;最简单的就是在php中使用fopen()函数或者fsockopen()函数,但是fopen函数和fsockopen()函数没有足够的参数可以使用,比如当你想搭建一个“网络爬虫”的时候,我要定义爬虫(IE、firefox)的客户端描述,通过不同的请求方式获取内容,如POST、GET;等等。这些要求是用 fopen() 函数和 fsockopen() 函数是不可能实现的。
为了解决我们上面提出的问题,我们可以使用PHP的扩展库-Curl。这个扩展库通常默认收录在安装包中。你可以用它来获取其他网站的内容,也可以做其他事情。
注意:这两段代码需要php_curl扩展库的支持。检查 phpinfo()。如果启用了 curl 支持,则表示支持 curl 库。
在1、Windows 下打开对 PHP 的 curl 库支持:
打开 php.ini 并删除;在 extension=php_curl.dll 之前。
2、Linux 下的 PHP 开启 curl 库支持:
编译PHP时,在./configure后面加上--with-curl
在这个文章中,我们来看看curl库的使用方法,看看它的其他用途,但接下来,我们将从最基本的用法开始
基本用法:
第一步,我们通过函数curl_init()新建一个curl会话,代码如下:
我们已经成功创建了一个curl会话,如果需要获取一个URL的内容,那么下一步,将一个URL传递给curl_setopt()函数,代码:
上一步完成后,curl的准备工作就完成了,curl会获取URL站点的内容并打印出来。代码:
最后,关闭当前的 curl 会话
让我们看看下面完成的示例代码:
(查看在线演示)
我们刚刚获取了另一个站点的内容并自动将其输出到浏览器。我们还有其他的方式来组织获取的信息,然后控制输出的内容吗?完全没有问题。在curl_setopt()函数的参数中,如果想获取内容但不输出,使用CURLOPT_RETURNTRANSFER参数并设置为非零值/true!,完整代码请看:
(查看在线演示)
在上面的两个例子中,你可能会注意到,通过设置函数 curl_setopt() 的不同参数可以得到不同的结果。这就是 curl 如此强大的原因。下面我们来看看这些参数的含义。
CURL 相关选项:
如果你看过php手册中的curl_setopt()函数,你会注意到它下面有一长串参数,我们无法一一介绍。更多内容请查看PHP手册。这里只介绍常用的。还有一些参数。
第一个有趣的参数是 CURLOPT_FOLLOWLOCATION。当您将此参数设置为 true 时,curl 将根据任何重定向命令获取更深层次的重定向路径。例如:当你尝试获取一个PHP页面时,那么这个PHP页面中有一个跳转代码,curl会获取内容而不是返回跳转代码。完整代码如下:
(查看在线演示),
如果 Google 发送重定向请求,上面的示例将继续根据重定向的 URL 获取内容。与此参数相关的两个选项是 CURLOPT_MAXREDIRS 和 CURLOPT_AUTOREFERER。
参数 CURLOPT_MAXREDIRS 选项允许您定义跳转请求的最大数量,超过该数量将不再检索内容。如果 CURLOPT_AUTOREFERER 设置为 true,curl 将自动在每个重定向链接中添加 Refererheader。它可能不是很重要,但在某些情况下非常有用。
下一步引入的参数是CURLOPT_POST,这是一个非常有用的特性,因为它允许你做POST请求而不是GET请求,这实际上意味着你可以提交
其他形式的页面不需要在表格中填写。以下示例说明了我的意思:
(观看现场演示)
以及 handle_form.php 文件:
如您所见,这使得提交表单变得非常容易,这是一种无需一直填写即可测试所有表单的好方法。
参数 CURLOPT_CONNECTTIMEOUT 通常用于设置 curl 尝试请求链接的时间。这是一个非常重要的选择。如果这个时间设置的太短,可能会导致 curl 请求失败。
但是如果设置的时间太长,PHP 脚本可能会死掉。与此参数相关的一个选项是 CURLOPT_TIMEOUT,用于设置 curl 执行所需的时间。如果设置的太小,可能会导致网页下载不完整,因为下载时间会比较长。
最后一个选项是 CURLOPT_USERAGENT,它允许你自定义请求的客户端名称,例如 webspilder 或 IE6.0.。示例代码如下:
(观看现场演示)
既然我们已经介绍了最有趣的参数之一,让我们介绍一个 curl_getinfo() 函数,看看它可以为我们做什么。
获取页面信息:
函数 curl_getinfo() 允许我们获取接收页面的各种信息。您可以通过设置选项的第二个参数来编辑此信息。也可以以数组的形式传递数组。就像下面的例子:
(观看现场演示)
返回的信息大部分是请求本身,比如:请求所用的时间,返回的头文件信息,当然还有一些页面信息,比如页面内容的大小,最后修改时间.
那些都是关于 curl_getinfo() 函数,现在让我们看看它的实际用途。
实际使用:
curl 库的第一个用途是检查 URL 页面是否存在。我们可以通过查看URL请求返回的代码来判断。例如,404 表示该页面不存在。让我们看一些例子:
(观看现场演示)
其他用户可能会创建一个自动检查器来验证每个请求的页面是否存在。
我们可以使用 curl 库来编写类似于 Google 或其他网络蜘蛛的网络蜘蛛。这个文章不是关于如何写一个网络蜘蛛,所以我们没有谈论任何关于网络蜘蛛的细节,但是在未来PHPit会介绍使用curl来构建一个网络蜘蛛。
结论:
在这个文章 中,我展示了如何在 php 中使用 curl 库及其大部分选项。
对于最基本的任务,你只是想得到一个网页,你可能不需要 CURL 库,但是一旦你想做一些稍微高级的事情,你可能想要使用 curl 库。
在不久的将来,我会告诉你如何构建自己的网络蜘蛛,类似于谷歌的网络蜘蛛,敬请关注phpit。
来自:%D1%DE%D1%F4597122966/blog/item/61b8727b1f1a60fd0ad1872d.html 查看全部
php curl抓取网页(如何使用PHP脚本代码中会的使用_curl代码如下)
配置方法:
1、将PHP目录下的libeay32.dll和ssleay32.dll两个文件复制到system32目录下。
2、Modify php.ini:配置extension_dir,去掉extension=php_curl.dll前的分号。
总结:
在这个文章中,我主要讲解php_curl库的知识,教大家如何更好的使用php_curl。
简介
您在 PHP 脚本代码中可能会遇到这样一个问题:如何从其他站点获取内容?这里有几种解决方案;最简单的就是在php中使用fopen()函数或者fsockopen()函数,但是fopen函数和fsockopen()函数没有足够的参数可以使用,比如当你想搭建一个“网络爬虫”的时候,我要定义爬虫(IE、firefox)的客户端描述,通过不同的请求方式获取内容,如POST、GET;等等。这些要求是用 fopen() 函数和 fsockopen() 函数是不可能实现的。
为了解决我们上面提出的问题,我们可以使用PHP的扩展库-Curl。这个扩展库通常默认收录在安装包中。你可以用它来获取其他网站的内容,也可以做其他事情。
注意:这两段代码需要php_curl扩展库的支持。检查 phpinfo()。如果启用了 curl 支持,则表示支持 curl 库。
在1、Windows 下打开对 PHP 的 curl 库支持:
打开 php.ini 并删除;在 extension=php_curl.dll 之前。
2、Linux 下的 PHP 开启 curl 库支持:
编译PHP时,在./configure后面加上--with-curl
在这个文章中,我们来看看curl库的使用方法,看看它的其他用途,但接下来,我们将从最基本的用法开始
基本用法:
第一步,我们通过函数curl_init()新建一个curl会话,代码如下:
我们已经成功创建了一个curl会话,如果需要获取一个URL的内容,那么下一步,将一个URL传递给curl_setopt()函数,代码:
上一步完成后,curl的准备工作就完成了,curl会获取URL站点的内容并打印出来。代码:
最后,关闭当前的 curl 会话
让我们看看下面完成的示例代码:
(查看在线演示)
我们刚刚获取了另一个站点的内容并自动将其输出到浏览器。我们还有其他的方式来组织获取的信息,然后控制输出的内容吗?完全没有问题。在curl_setopt()函数的参数中,如果想获取内容但不输出,使用CURLOPT_RETURNTRANSFER参数并设置为非零值/true!,完整代码请看:
(查看在线演示)
在上面的两个例子中,你可能会注意到,通过设置函数 curl_setopt() 的不同参数可以得到不同的结果。这就是 curl 如此强大的原因。下面我们来看看这些参数的含义。
CURL 相关选项:
如果你看过php手册中的curl_setopt()函数,你会注意到它下面有一长串参数,我们无法一一介绍。更多内容请查看PHP手册。这里只介绍常用的。还有一些参数。
第一个有趣的参数是 CURLOPT_FOLLOWLOCATION。当您将此参数设置为 true 时,curl 将根据任何重定向命令获取更深层次的重定向路径。例如:当你尝试获取一个PHP页面时,那么这个PHP页面中有一个跳转代码,curl会获取内容而不是返回跳转代码。完整代码如下:
(查看在线演示),
如果 Google 发送重定向请求,上面的示例将继续根据重定向的 URL 获取内容。与此参数相关的两个选项是 CURLOPT_MAXREDIRS 和 CURLOPT_AUTOREFERER。
参数 CURLOPT_MAXREDIRS 选项允许您定义跳转请求的最大数量,超过该数量将不再检索内容。如果 CURLOPT_AUTOREFERER 设置为 true,curl 将自动在每个重定向链接中添加 Refererheader。它可能不是很重要,但在某些情况下非常有用。
下一步引入的参数是CURLOPT_POST,这是一个非常有用的特性,因为它允许你做POST请求而不是GET请求,这实际上意味着你可以提交
其他形式的页面不需要在表格中填写。以下示例说明了我的意思:
(观看现场演示)
以及 handle_form.php 文件:
如您所见,这使得提交表单变得非常容易,这是一种无需一直填写即可测试所有表单的好方法。
参数 CURLOPT_CONNECTTIMEOUT 通常用于设置 curl 尝试请求链接的时间。这是一个非常重要的选择。如果这个时间设置的太短,可能会导致 curl 请求失败。
但是如果设置的时间太长,PHP 脚本可能会死掉。与此参数相关的一个选项是 CURLOPT_TIMEOUT,用于设置 curl 执行所需的时间。如果设置的太小,可能会导致网页下载不完整,因为下载时间会比较长。
最后一个选项是 CURLOPT_USERAGENT,它允许你自定义请求的客户端名称,例如 webspilder 或 IE6.0.。示例代码如下:
(观看现场演示)
既然我们已经介绍了最有趣的参数之一,让我们介绍一个 curl_getinfo() 函数,看看它可以为我们做什么。
获取页面信息:
函数 curl_getinfo() 允许我们获取接收页面的各种信息。您可以通过设置选项的第二个参数来编辑此信息。也可以以数组的形式传递数组。就像下面的例子:
(观看现场演示)
返回的信息大部分是请求本身,比如:请求所用的时间,返回的头文件信息,当然还有一些页面信息,比如页面内容的大小,最后修改时间.
那些都是关于 curl_getinfo() 函数,现在让我们看看它的实际用途。
实际使用:
curl 库的第一个用途是检查 URL 页面是否存在。我们可以通过查看URL请求返回的代码来判断。例如,404 表示该页面不存在。让我们看一些例子:
(观看现场演示)
其他用户可能会创建一个自动检查器来验证每个请求的页面是否存在。
我们可以使用 curl 库来编写类似于 Google 或其他网络蜘蛛的网络蜘蛛。这个文章不是关于如何写一个网络蜘蛛,所以我们没有谈论任何关于网络蜘蛛的细节,但是在未来PHPit会介绍使用curl来构建一个网络蜘蛛。
结论:
在这个文章 中,我展示了如何在 php 中使用 curl 库及其大部分选项。
对于最基本的任务,你只是想得到一个网页,你可能不需要 CURL 库,但是一旦你想做一些稍微高级的事情,你可能想要使用 curl 库。
在不久的将来,我会告诉你如何构建自己的网络蜘蛛,类似于谷歌的网络蜘蛛,敬请关注phpit。
来自:%D1%DE%D1%F4597122966/blog/item/61b8727b1f1a60fd0ad1872d.html