我收到socket.gaierror:提供了[Errno 8] nodename或servname,或者在Linux而不是MAC os x上运行时不知道

时间:2019-02-28 19:46:31

标签: python sockets python-requests

我正在使用python 3.5.4,请求2.21.0,urllib3 1.24.1和套接字1.0.0

当我在Mac(OS Mojave)上运行以下代码时,它可以正确连接到网站并返回html以便我进行抓取和分析,但是,当我在linux VM Ware上尝试此操作时,因为客户端没有MAC,我收到套接字错误。

quote_page = "http://stats.ncaa.org/teams/312381"
hdr = {
    'Temp': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}
session = requests.Session()
req = session.get(quote_page, headers=hdr)

错误: socket.gaierror: [Errno 8] nodename nor servname provided, or not known

当我尝试通过直接的低级套接字进行连接时,我能够在MAC上重新创建错误。

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server = ("http://stats.ncaa.org/teams/312381", 80)
s.connect(server)
s.sendall("GET / HTTP/1.1\r\n")
print(s.recv(4096))

我不知道我做错了什么,为什么它不能在OS X上运行但不能在Ubuntu上运行。

2 个答案:

答案 0 :(得分:0)

已解决:问题是我正在从网页获取URL,并且网页格式根据我所使用的操作系统而有所不同。意味着我从网页中获得了错误的网址。

答案 1 :(得分:0)

我认为您的问题是您在要连接到的地址的主机名部分中包含字符串 http:// 和 URL 路径 (/teams/312381)。忽略这一点,你会没事的。