gpt4 book ai didi

python - 如何在 python 3.6 上制作一个简单的网络浏览器?

转载 作者:太空宇宙 更新时间:2023-11-03 21:31:52 24 4
gpt4 key购买 nike

到目前为止,这就是我所拥有的,我看过的每个地方都说这段代码应该可以工作,但事实并非如此。

import socket

mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('data.pr4e.org', 80))
mysock.send(b'GET http://data.pr4e.org/romeo.txt HTTP/1.0\n\n')

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

mysock.close()

这是我得到的输出:

b'HTTP/1.1 400 Bad Request\r\nDate: Sun, 25 Nov 2018 19:23:51 GMT\r\nServer: 
Apache/2.4.18 (Ubuntu)\r\nContent-Length: 308\r\nConnection:
close\r\nContent-Type: text/html; charset=iso-8859-1\r\n\r\n<!DOCTYPE HTML
PUBLIC "-//IETF//DTD HTML 2.0//EN">\n<html><head>\n<title>400 Bad
Request</title>\n</head><body>\n<h1>Bad Request</h1>\n<p>Your browser sent a
request that this server could not understand.<br
/>\n</p>\n<hr>\n<address>Apache/2.4.18 (Ubuntu) Server at do1.dr-chuck.com
Port 80</address>\n</body></html>\n'

这就是示例所说的我应该返回的内容:

HTTP/1.1 200 OK
Date: Sun, 14 Mar 2010 23:52:41 GMT
Server: Apache
Last-Modified: Tue, 29 Dec 2009 01:31:22 GMT
ETag: "143c1b33-a7-4b395bea"
Accept-Ranges: bytes
Content-Length: 167
Connection: close
Content-Type: text/plain
But soft what light through yonder window breaks
It is the east and Juliet is the sun
Arise fair sun and kill the envious moon
Who is already sick and pale with grief

为什么我没有得到相同的输出?

最佳答案

从某种意义上说,您的代码之所以有效,是因为它可以成功地将请求发送到服务器,并且您确实得到了有效的结果。您可以看到错误消息本身来自服务器。

但是您没有得到预期结果,所以这确实是一个问题。直接打开http://data.pr4e.org/romeo.txt在浏览器中工作正常,所以让我们进一步看一下,例如像 400 error header with sockets 这样的问题,它们处理几乎相同的问题。

经过一些实验,该 Web 服务器似乎需要 Microsoft Windows 样式的行尾:\r \n。正如您的尝试那样,仅使用 \n 是行不通的 – 您会收到该错误。只需一个 \r 就会让服务器无限期地等待(或者更确切地说“相当长的时间,而且肯定比我准备等待这个实验的时间还要长”)。

因此,这个简单的修改就可以使您的原始程序正常工作:

mysock.send(b'GET http://data.pr4e.org/romeo.txt HTTP/1.0\r\n\r\n')

并在几个标题之后返回这首诗:

... But soft what bytes through yonder port breaks
It is a request and Http is the Sun ...

(诚然略有转述)

在某些操作系统上(我只知道 Microsoft Windows),行尾 \n 的标准代码自动扩展为 \r\n。因此,可以合理地假设您的工作示例代码是在 Windows 计算机上编写和测试的,并且其编写者从不知道(或关心)Apache 服务器需要这种显式的行结束类型。

关于python - 如何在 python 3.6 上制作一个简单的网络浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53471071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com