[英]Using Sockets to Connect to the Internet (Python 2.7)
我正在学习如何在 Python for Informatics 这本书中使用套接字,并且被作业 12.1 难住了,它要求读者
提示用户输入 URL,以便它可以读取任何网页。 您可以使用 split('/') 将 URL 分解为其组成部分,以便提取套接字连接调用的主机名。 使用 try 和 except 添加错误检查以处理用户输入格式不正确或不存在的 URL 的情况。
这是我的尝试:
import socket
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
x = raw_input("Please enter a URL: ")
try:
mysock.connect((x, 80))
mysock.send('GET x')
except:
Print "I'm sorry, but I cannot open this webpage!"
quit()
While True:
data = mysock.recv(512)
if ( len(data) < 1) :
break
print data
mysock.close()
我得到的只是“找不到命令”。
任何帮助将不胜感激!
所以这是我的尝试(没有对 URL 进行错误检查),它也给出了一个错误“错误的请求”,“您的浏览器发送了一个该服务器无法理解的请求”。
我认为它与这个特定部分有关:("GET fname HTTP/1.0\\n\\n)")。 无论如何要在此处插入变量“fname”(用户提示的 URL)?
import socket
fname = raw_input("Enter an URL: ")
parts = fname.split("/")
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect( (parts[2], 80))
mysock.send("GET fname HTTP/1.0\n\n)")
while True:
data = mysock.recv(512)
if ( len (data) < 1) :
break
print data
mysock.close()
import socket
url = raw_input('Enter url-')
words = url.split('/')
print words
if words[0] != 'http:':
host_url = words[0]
url = 'http://'+ url
else:
host_url = words[2]
request = 'GET '+ url + ' HTTP/1.0\n\n'
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect((host_url, 80))
mysock.send(request)
while True:
data = mysock.recv(512)
if ( len(data) < 1 ) :
break
print data
mysock.close()
import socket
url=input('Enter-')
host=url.split('/')[2]
mysock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
mysock.connect((host,80))
cmd=f'GET {url} HTTP/1.0\r\n\r\n'.encode()
mysock.send(cmd)
while True:
data=mysock.recv(512)
if len(data)<1:
break
print(data.decode(),end="")
mysock.close()
这是我的工作代码,我认为它会对您有所帮助:
{import socket
url=input("Enter url >> ")
try:
address=url.split("/")
HOST=address[2]
print("HOST: ",HOST)
mysock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
mysock.connect((HOST,80))
cmd=("GET " + url+ " HTTP/1.0\r\n\r\n").encode()
mysock.send(cmd)
while True:
data=mysock.recv(512)
if (len(data)<1):
break
print(data.decode(), end="")
mysock.close()
except:
print("Improper formatted url")}
这对我来说非常有效,因为try和except 的工作方式是重新提示您进入网页而不是完全结束程序:
import socket
while True:
webpage=input('Enter a web page: ')
try:
webpagelst=webpage.split('/')
host=webpagelst[2]
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect((host, 80))
cmd = 'GET '+webpage+' HTTP/1.0\r\n\r\n'
mysock.send(cmd.encode())
except:
print('Please enter a valid web address')
continue
while True:
data = mysock.recv(512)
if len(data) < 1:
break
print(data.decode(),end='')
break
mysock.close()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.