使用socket.send发送HTTP 1.1 GET请求,python

2024-03-28 13:22:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图通过向google服务器发送Get请求, GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n 通过Python3 sockets.send函数。发送代码如下所示:

import socket
buffer = input()     #filled the with 'GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n'
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
target = "www.google.com"
port = 80
client.connect((target,port))    
client.send(buffer.encode()) 
while True:
    recv_len = 1
    response = ""
    while recv_len:
        data        = client.recv(4096).decode(errors="ignore")
        recv_len    = len(data)
        response    += data
        if recv_len < 4096:
            break
    print(response)

但是我没有从服务器收到任何数据。 有人能帮我吗?我尝试过类似的问题,但大多数问题都集中在请求中使用\n


Tags: comclientsendhttptargetdatagetlen
1条回答
网友
1楼 · 发布于 2024-03-28 13:22:54

问题出在线路上

buffer = input()

正如前面提到的Serge Ballestainput()函数将\r读取为两个字符"\""r"。使用

buffer = sys.stdin.read()

通过管道将GET请求传输到程序文件将解决此问题

echo -ne "GET / HTTP/1.1\r\nHost: www.google.com\r\n\r\n" |python3 temp.py

相关问题 更多 >