如何解决Python中的基本浏览器从用户
我正在研究一本名为《 Python for Everbody》的书,并且一直困扰着问题两天。我很确定这是我看不到的超级简单的东西,但似乎无法破解。
如果在错误的位置张贴或格式不正确,请提前致歉。这是我的第一篇文章,现在我正在全力以赴。
因此,练习是从基本的Internet浏览器开始...
import socket
mysock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
mysock.connect(('data.pr4e.org',80))
cmd = 'GET http://data.pr4e.org/romeo.txt 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()
任务是重写代码,以便它以url作为输入。我遇到的问题是将输入变量添加到cmd行中。我尝试了以下方法:
import socket
# Establish url and server from user input
url = input('Please enter url>>')
clnpos = url.find(':')
server = url[clnpos +3:len(url)]
# Run program with variable
mysock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
mysock.connect((server),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()
我也尝试过将cmd行设置为自己的变量...
import socket
url = input('Please enter url>>')
clnpos = url.find(':')
server = url[clnpos +3:len(url)]
cmdline = ('GET','HTTP/1.0\r\n\r\n'.encode())
mysock = socket.socket(socket.AF_INET,80)
cmd = (cmdline)
mysock.send(cmd)
while True:
data = mysock.recv(512)
if len(data) < 1:
break
print(data.decode(),end='')
mysock.close()
就像我说的那样,我很确定我缺少一些愚蠢的东西,几乎感到尴尬,但我只是看不出我要去哪里。
我们将非常感谢您提供的任何帮助。
解决方法
mysock.connect
仅接受一个参数,并且必须是一个元组。您只需要稍微移动一下括号
mysock.connect((server,80))
您的cmd
变量也有一个错误,它必须是字符串。
您必须串联字符串的三个部分。最好的方法是使用f-string
cmd = f'GET {url} HTTP/1.0\r\n\r\n'.encode()
或者您可以
cmd = "GET {} HTTP/1.0\r\n\r\n".format(url).encode()
完整代码:
import socket
# Establish url and server from user input
url = input('Please enter url>>')
clnpos = url.find(':')
server = url[clnpos +3:len(url)]
# Run program with variable
mysock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
mysock.connect((server,80))
# mysock.connect((server,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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。