Отправка запросов HTTP 1.1 GET с socket.send, python - PullRequest
2 голосов
/ 28 мая 2020

Я пытаюсь отправить запрос Get на сервер Google с помощью 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 в запросе.

1 Ответ

0 голосов
/ 28 мая 2020

Проблема в строке

buffer = input()

Как упоминалось в Serge Ballesta , функция input() читает \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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...