我正在尝试设置代理,并且我正在使用套接字和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.com或http://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()
答案 0 :(得分:4)
这是我看到的常见错误......
url="https://foo.tld"
port=443
conn=httplib.HTTPConnection(url,port)
由于“https://”......
,这不起作用你应该这样做:
url="foo.tld"
port=443
conn=httplib.HTTPConnection(url,port)
这样可行。我不确定这是否是您的具体问题,但肯定需要验证。