python - 获取 socket.gaierror : [Errno 8] nodename nor servname provided, 或未知

标签 python sockets proxy

我正在尝试设置代理,并且正在使用 socket 和 httlib 模块。我的网络浏览器指向服务器运行的本地主机和端口,我正在通过服务器处理 HTTP 请求。
当浏览器请求网页时,我从 HTTP header 中提取 url,然后尝试通过以下方式通过代理发出请求:-

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

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

因此,当我运行代理并将浏览器类型输入到 http://www.google.com 之类的地址时,我似乎遇到了错误。或 http://www.getmetal.org .

错误是:-

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

还有一个痕迹:-

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()

最佳答案

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

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

conn=httplib.HTTPConnection(url,port)

由于“https://”,这将不起作用...

你应该这样做:
url="foo.tld"
port=443

conn=httplib.HTTPConnection(url,port)

这会奏效。我不确定这是否是您的具体问题,但肯定需要验证。

关于python - 获取 socket.gaierror : [Errno 8] nodename nor servname provided, 或未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35565768/

相关文章:

python - 在具有混合值的数据框中区分 0 和 False 的简单方法

c# - Android与C#之间的进程间通信

javascript - 将 Socket.io 与 Node.js、Express 和 Jade 结合使用

python - Google App Engine 代理

php - 在 PHP 中使用 HTTP 代理

python - 大范围连续整数的数据结构?

Python - 在列表理解中使用 if、elif 和 else 及其各自的结果

python - 匹配美国电话号码的正则表达式

c - 通过无线连接的两台计算机之间的信息交换

http - 如何找到代理是 Http 还是 Socks