获取socket.gaierror:提供了[Errno 8] nodename或servname,或者未知

时间:2016-02-22 23:10:48

标签: python sockets proxy

我正在尝试设置代理,并且我正在使用套接字和httlib模块。我的Web浏览器指向运行服务器的localhost和端口,我通过服务器处理HTTP请求。 当浏览器请求网页然后尝试通过代理以下列方式发出请求时,我从HTTP标头中提取URL: -

conn = httplib.HTTPSConnection(url,serverPort)
conn.request("GET",url)
r1 = conn.getresponse()
print r1.status,r1.reason

请注意,第一行中的serverPort参数是代理所在的端口,url是在向网页发出请求时从浏览器收到的HTTP标头中提取的URL。

因此,当我运行代理并将浏览器类型设置为http://www.google.comhttp://www.getmetal.org等地址时,我似乎遇到了错误。

错误是: -

socket.gaierror:[Errno 8]提供nodename或servname,或者不知道

还有一条痕迹: -

http://i.stack.imgur.com/UgZwD.png

如果有人对问题是什么有任何建议我很高兴。 以下是代理服务器的代码:注意:如果您正在测试此问题,可能会出现一些缩进问题,因为必须将所有4个空格放在右侧才能将其显示为代码段

from socket import *
import httplib 
import webbrowser
import string

serverPort = 2000
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('', serverPort))
serverSocket.listen(2)
urlList=['www.facebook.com','www.youtube.com','www.twitter.com']
print 'The server is ready to receive'

while 1:
    connectionSocket, addr = serverSocket.accept()
    print addr
    req= connectionSocket.recv(1024)


    #parse Get request here abnd extract url
    reqHeaderData= req.split('\n')

    newList=[]

    x=0
    while x<len(reqHeaderData):

        st=reqHeaderData[x]
        element= st.split(' ')
        print element
        newList.append(element)
        x=x+1

   print newList[0][1]
   url = newList[0][1] 
   url= url[:-1]


  for i in urlList:
      if url ==i:

       raise Exception("The website you are trying to access is     blocked")




    connectionSocket.send('Valid')


    print(url)
    conn = httplib.HTTPSConnection(url,serverPort)
    print conn
    conn.request("GET",url)
    print "request printed"
    r1 = conn.getresponse()
    print r1.status,r1.reason
    print r1
    #200 OK

    data = r1.read()

    x= r1.getheaders()

    for i in x:
        print i


    connectionSocket.close()

1 个答案:

答案 0 :(得分:4)

这是我看到的常见错误......

url="https://foo.tld"
port=443

conn=httplib.HTTPConnection(url,port)

由于“https://”......

,这不起作用

你应该这样做:

url="foo.tld"
port=443

conn=httplib.HTTPConnection(url,port)

这样可行。我不确定这是否是您的具体问题,但肯定需要验证。