为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕少森 2022-05-11 15:50:09
我刚刚在 Codeacademy 上完成了 Python 课程并阅读了一本关于网络的书。现在我想使用 HTTP 协议向谷歌服务器(或其他地方)发送一条 GET 消息,并仅使用 python 脚本读取请求。但我不想使用任何东西,但套接字模块原因是它似乎很容易。只需创建一个 TCP 连接并发送一条消息,然后接收答案。我觉得为这个东西使用一个特殊的库是一个松散的人,我只需要自己做!import socketservername = 'google.com'serverport = 80clientsocket = 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()我尝试了不同的代码方法,但据我所知,它应该看起来像这样,有什么问题?为什么它不起作用?
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

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


CRLF = '\r\n'

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



查看完整回答
反对 回复 2022-05-11
?
慕慕森

TA贡献1856条经验 获得超17个赞

import socket


servername = 'google.com'

serverport = 80


clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


sentence = '''GET / HTTP/1.1

Host: {}

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-US;q=0.5,en;q=0.3

Connection: 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()


查看完整回答
反对 回复 2022-05-11
  • 2 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号