Python中的基本浏览器。从用户获取URL

Python中的基本浏览器。从用户获取URL,python,python-3.x,sockets,http,browser,Python,Python 3.x,Sockets,Http,Browser,我正在读一本名为《Python For Everbody》的书,有几天一直在解决一个问题。我敢肯定这是一个超级简单的东西,我没有看到,但似乎无法破解它 如果在错误的位置发布或格式不正确,请提前道歉。这是我的第一篇博文,我正全神贯注于此 所以,练习是从一个基本的互联网浏览器开始 import socket mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) mysock.connect(('data.pr4e.org', 80))

我正在读一本名为《Python For Everbody》的书,有几天一直在解决一个问题。我敢肯定这是一个超级简单的东西,我没有看到,但似乎无法破解它

如果在错误的位置发布或格式不正确,请提前道歉。这是我的第一篇博文,我正全神贯注于此

所以,练习是从一个基本的互联网浏览器开始

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()
导入套接字
mysock=socket.socket(socket.AF\u INET,socket.SOCK\u流)
connect(('data.pr4e.org',80))
cmd='GEThttp://data.pr4e.org/romeo.txt HTTP/1.0\r\n\r\n'.encode()
mysock.send(cmd)
尽管如此:
data=mysock.recv(512)
如果len(数据)<1:
打破
打印(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()
导入套接字
#根据用户输入建立url和服务器
url=输入('请输入url>>')
clnpos=url.find(“:”)
server=url[clnpos+3:len(url)]
#使用变量运行程序
mysock=socket.socket(socket.AF\u INET,socket.SOCK\u流)
mysock.connect((服务器),80)
cmd=('GET',(url),'HTTP/1.0\r\n\r\n'.encode())
mysock.send(cmd)
尽管如此:
data=mysock.recv(512)
如果len(数据)<1:
打破
打印(data.decode(),end='')
mysock.close()
我也尝试过让cmd行成为它自己的变量

import socket

url = input('Please enter url>>')

clnpos = url.find(':')
server = url[clnpos +3:len(url)]
cmdline = ('GET', (url), 'HTTP/1.0\r\n\r\n'.encode())

mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect((server), 80)
cmd = (cmdline)
mysock.send(cmd)

while True:
    data = mysock.recv(512)
    if len(data) < 1:
        break
    print(data.decode(),end='')

mysock.close()
导入套接字
url=输入('请输入url>>')
clnpos=url.find(“:”)
server=url[clnpos+3:len(url)]
cmdline=('GET',(url),'HTTP/1.0\r\n\r\n'.encode())
mysock=socket.socket(socket.AF\u INET,socket.SOCK\u流)
mysock.connect((服务器),80)
cmd=(cmdline)
mysock.send(cmd)
尽管如此:
data=mysock.recv(512)
如果len(数据)<1:
打破
打印(data.decode(),end='')
mysock.close()
就像我说的,我很确定我遗漏了一些愚蠢的东西,几乎感到尴尬,但我就是看不出我错在哪里


我们将非常感谢您提供的任何帮助。

mysock.connect
只接受一个参数,它必须是一个元组。你只需要稍微移动一下括号

mysock.connect((server, 80))
cmd
变量也有一个错误,它必须是字符串

您必须连接字符串的三个部分。最好的方法是使用

或者你可以

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()
导入套接字
#根据用户输入建立url和服务器
url=输入('请输入url>>')
clnpos=url.find(“:”)
server=url[clnpos+3:len(url)]
#使用变量运行程序
mysock=socket.socket(socket.AF\u INET,socket.SOCK\u流)
mysock.connect((服务器,80))
#mysock.connect((服务器,80))
cmd=f'GET{url}HTTP/1.0\r\n\r\n'.encode()
mysock.send(cmd)
尽管如此:
data=mysock.recv(512)
如果len(数据)<1:
打破
打印(data.decode(),end='')
mysock.close()
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()