首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >socket.gethostbyname不为我的ddns主机名工作

问socket.gethostbyname不为我的ddns主机名工作
EN

Stack Overflow用户
提问于 2016-06-01 10:05:24
回答 1查看 2.9K关注 0票数 0

我有下面的代码平我的ddns主机名,并返回如果主机是上或下。然后我尝试添加socket.gethostbyname,它适用于我的普通主机名www.iamsimonsmale.co.uk,但不适用于http://ssmale.ddns.net。

我试图从地址的开头删除http://,但这也失败了。

代码语言:javascript
复制
#!/usr/bin/env python
# This script checks to see if the server is up or down and prints the pinged IP

import requests
import socket
import time

while True:

    host = 'http://ssmale.ddns.net'

    ip = socket.gethostbyname(host)

    print ip

    response = requests.get(host)
    if response.status_code == requests.codes.ok:
        print('Server Up')
    else:
        print('Server Down')
    time.sleep(10)

http://ssmale.ddns.net的错误消息是

代码语言:javascript
复制
Traceback (most recent call last):
File "PingTestIP.py", line 12, in <module>
ip = socket.gethostbyname('http://ssmale.ddns.net')
socket.gaierror: [Errno -2] Name or service not known

对于ssmale.ddns.net来说

代码语言:javascript
复制
Traceback (most recent call last):
File "PingTestIP.py", line 16, in <module>
response = requests.get(host)
File "/usr/lib/python2.7/dist-packages/requests/api.py", line 60, in get
return request('get', url, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/api.py", line 49, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 443, in request
prep = self.prepare_request(req)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 374, in prepare_request
hooks=merge_hooks(request.hooks, self.hooks),
File "/usr/lib/python2.7/dist-packages/requests/models.py", line 304, in prepare
self.prepare_url(url, params)
File "/usr/lib/python2.7/dist-packages/requests/models.py", line 358, in prepare_url
"Perhaps you meant http://{0}?".format(url))
requests.exceptions.MissingSchema: Invalid URL u'ssmale.ddns.net': No schema supplied. Perhaps you meant http://ssmale.ddns.net?

当使用`www.iamsimonsmale.co.uk完成时,它可以工作,打印结果是

代码语言:javascript
复制
86.136.251.202
Server Up

我还试图使用来自How do I get the IP address from a http request using the requests library?的代码,但没有成功。

使用这个工具(http://mxtoolbox.com/SuperTool.aspx#),我确认在ssmale.ddns.net的DNS中有一个A记录

是什么引起了这个问题,我该如何解决呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-02 20:58:17

查询没有http://部件的地址:

代码语言:javascript
复制
ip = socket.gethostbyname('ssmale.ddns.net')

然后在请求查询中使用完整地址:

代码语言:javascript
复制
response = requests.get("http://ssmale.ddns.net")

在我的机器上工作:

代码语言:javascript
复制
>>> import socket

>>> socket.gethostbyname("ssmale.ddns.net")
'86.136.251.202'

>>> import requests

>>> requests.get("http://ssmale.ddns.net")
<Response [200]>

您发布的错误消息已经说了:No schema supplied. Perhaps you meant http://ssmale.ddns.net?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37565565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档