python - 如何在不使用任何库的情况下向服务器发送 HTTP 请求并在 python 中获得答案

标签 python python-3.x sockets get

我刚刚在 Codeacademy 上完成了 Python 类(class)并阅读了一本关于网络的书。现在我想使用 HTTP 协议(protocol)向谷歌服务器(或其他地方)发送一条 GET 消息,并仅使用 python 脚本读取请求。但我不想使用任何东西,但套接字模块

原因是它似乎很容易。只需创建一个 TCP 连接并发送一条消息,然后接收答案。我觉得为这个东西使用一个特殊的库是一个松散的人,我只需要自己做!

import socket

servername = 'google.com'
serverport = 80

clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sentence = 'GET / HTTP/1.1\nHost: google.com\nConnection: close'.format(servername)
print(sentence)

clientsocket.connect((servername, serverport))
clientsocket.send(sentence.encode())

new_sentence = clientsocket.recv(1024)
print('from server: {}'.format(new_sentence.decode()))

clientsocket.close()

我尝试了不同的代码方法,但据我所知,它应该看起来像这样,有什么问题?为什么它不起作用?

最佳答案

您没有收到服务器的响应,因为它仍在等待您的数据。在 HTTP protocol你应该发送\r\n\r\n (CRLF CRLF) 通知服务器请求头结束。

CRLF = '\r\n'
sentence = CRLF.join(['GET / HTTP/1.1', 'Host: ' + servername, 'Connection: close', '', ''])

关于python - 如何在不使用任何库的情况下向服务器发送 HTTP 请求并在 python 中获得答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57645744/

相关文章:

python - 如何在Python的for循环中增加1或2

python - 如何在另一个类中使用一个类的变量

c - 用 C 创建的套接字可以在网络上工作吗?

python - 有效地查找 pandas 数据框中多行的形状

单节点上的 Python Celery 任务链

python - lightGBM 预测相同的值

python-3.x - python : SettingWithCopyWarning when trying to set value to True based on condition

python - 解密后的明文前面的b在pycrypto中是什么意思?

.net - TcpListener:如何监听所有接口(interface)上的特定端口?

python - socket.send() 挂起的任何原因?