【问题标题】:Checking if website responds in python using a browser user agent使用浏览器用户代理检查网站是否在 python 中响应
【发布时间】:2012-07-22 17:12:53
【问题描述】:

我正在尝试编写一个脚本来检查域名是否通过 dns 解析为其 IP 地址;使用我编写的python脚本。

我希望能够在几个顺序循环中执行此操作,但是在尝试运行一次循环后,我第二次运行脚本时,以前返回成功的 dns 解析响应的名称,现在没有。

下面是我的脚本:

#! C:\Python27
import socket,time

localtime = time.asctime( time.localtime(time.time()) )


def hostres(hostname):
    print "Attempting to resolve " + hostname 
    try:
        socket.gethostbyname(hostname)
        print "Resolved Successfully!"
    except socket.error:
        print "Could Not Resolve"

print "*************************************************"
print "Website loop starting.."
print "Local current time :", localtime
print "*************************************************"
print ""

text_file = open("sites.txt", "r")
lines = text_file.readlines()
for line in lines:
    hostres(line)
text_file.close()

文本文件的内容是:

www.google.com
en.wikipedia.org
www.youtube.com
us.gamespot.com

我认为这与这些域服务器将脚本识别为“机器人”而不是合法的最终用户有关,这样假设是否正确?

如果是这样,我如何仍然通过查找网站名称(或 IP,无关紧要)来检查 dns 名称是否解析,并且能够运行它而不会误读“请求失败”,尽管是否可以从浏览器完全访问该服务?

【问题讨论】:

  • 我看不出这段代码有任何问题,而且它对我来说很好用。可能是您的网络设置有问题或类似情况?
  • 所以它运行良好,在后续运行中没有负面响应?
  • 我不断收到“无法解决”所有问题,尝试在 linux 和 winXP 上进行测试(使用 IDLE)。
  • 您可以尝试从命令行而不是在 IDLE 中运行脚本吗?
  • 这肯定是您运行它的机器上的 dns 配置有问题。我将相同的代码粘贴到 Windows 7 上的 IDLE、python2.7 中,并且所有 4 个地址都已解析。考虑在superuser.com 上寻求帮助

标签: python web request dns resolve


【解决方案1】:

这个问题有几个问题。

  1. 您没有检查“网站是否响应”您正在测试 DNS 解析。您的所有 DNS 请求都转到一个名称服务器,即您的 LDNS 解析器。如果它们都解决了,它仍然没有说明 网站 的状态。此外,由于您实际上并未与这些网站交谈,因此他们无法知道您是机器人。如果您发出 HTTP 请求,它们只能检测到这一点(基于 HTTP 用户代理标头)。
  2. 关于您的代码问题,您需要先修剪换行符,然后才能对其执行 socket.gethostbyname()。将socket.gethostbyname(hostname) 替换为socket.gethostbyname(hostname.rstrip()) 就可以了。

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多