我正在尝试编写我的第一个Perl程序。如果您认为Perl对于手头的任务来说是一种糟糕的语言,请告诉我哪种语言可以更好地解决它。
该程序测试给定计算机和远程Apache服务器之间的连接。 首先,程序从Apache服务器请求目录列表,而不是解析列表并逐个下载所有文件。如果文件出现问题(连接在达到指定的Content-Length之前重置),则应记录此信息并检索下一个文件。无需保存文件甚至检查完整性,我只需要记录完成所需的时间以及连接重置的所有情况。
要从Apache生成的目录索引中检索链接列表,我计划使用类似于
的正则表达式/href=\"([^\"]+)\"/
实际上,regexp尚未调试。
从Perl执行HTTP请求的“引用”方式是什么?我用Google搜索并找到了使用许多不同库的示例,其中一些是商业化的。我需要能够检测到断开连接(超时或TCP重置)并处理这些内容的东西。
另一个问题。当使用最少的编码工作全局搜索字符串列表时,如何存储我的正则表达式捕获的所有内容?
答案 0 :(得分:10)
就整个问题描述而言,我会使用WWW::Mechanize。 Mechanize是LWP::UserAgent
的子类,它添加了有状态行为和HTML解析。使用mech,您可以$mech->get($url_of_index_page)
,然后使用$mech->find_all_links(criteria)
选择要关注的链接。
答案 1 :(得分:9)
你有很多问题。您帖子标题中的问题答案是使用LWP::Simple。
大多数其他问题都会在perlfaq9中得到解答,并提供相应的指示信息。
答案 2 :(得分:4)
至于正则表达式的解析标记是你问题的一部分,请不要!
http://htmlparsing.icenine.ca解释了为什么不应该这样做的一些原因。虽然你似乎试图解析的东西看起来很简单,但使用适当的解析器。
上面链接的页面不再存在......
答案 3 :(得分:3)
作为更一般的答案,Perl是用于执行HTTP请求的完美语言,就像许多其他语言一样。如果您熟悉Perl,请不要犹豫;有许多优秀的图书馆可以满足您的需求。