Форум сайта python.su
Всем привет! Можно ли отправить http request только с помощью socket? Пробовал заголовки добавлять - в ответ молчание. Без разницы на какой сайт слать. Интересно в академических целях.
import socket
req = b'GET https://api.telegram.org/bot{TOKEN}/getUpdates HTTP/1.1'
HOST = ‘api.telegram.org’
PORT = 443
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(req)
data = s.recv(1024)
if data:
print('Received:\n\r', repr(data))
Отредактировано WAP190779 (Дек. 15, 2023 08:16:24)
Офлайн
Вы не можете посылать хттп запросы напрямую через сокеты это принципиально разного уровня протоколы и инструменты в целом
Сокет если абстрактно - соединение
То есть вы можете создать соединение а дальше необходимо послать понятный веб серверу вопрос что бы получить ответ
Именно так сокеты и используется. Пишется сервер и клиент - создается между ними соединение и пускаются данные. Данные описываются и разбираются по этому это работает
Вы ведь не используете ssh для подключения по теленету?
С другой стороны можно обернуть веб запросы в сокет - но для чего это делать честно говоря - непонятно
import socket import http.client sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = ("example.com", 80) sock.connect(server_address) request = http.client.HTTPRequest("GET", "/", headers={"Host": "example.com"}) request_string = request.as_string() sock.sendall(request_string.encode()) response = b"" while True: data = sock.recv(1024) if not data: break response += data response_string = response.decode() # Decode response string response_object = http.client.HTTPResponse( socket_stream=sock, strict_mode=True, method="GET", url="/" ) response_object.begin() status_code = response_object.status response_data = response_object.read() sock.close()
Отредактировано ZerG (Дек. 15, 2023 10:06:29)
Офлайн
WAP190779Можно отправить. Только сначала изучи разницу между HTTP и HTTPS. Можешь также сниффер задействовать, чтобы узнать, что именно передаётся в пакетах.
Можно ли отправить http request только с помощью socket?
Отредактировано py.user.next (Дек. 15, 2023 10:14:39)
Офлайн
py.user.nextАга! Можно! Только прийдется написать свой requests %))))
Офлайн
py.user.nextСпасибо дружище. Дошло, кажысь. Да, с HTTP все работает. С HTTPS нужно еще пройти процесс шифрования.
Офлайн
ZerGЛет десять назад я изучал одну историю, где парень писал аську. Я ещё думал, что это сложновато и не нужно. В итоге он написал развитый клиент, мультиаську. Для этого нужно было всего лишь изучить этот протокол. Да, на изучение уйдёт много времени, да, он непростой (там много всяких слоёв). Ещё хуже, если ты никогда не писал никаких протоколов и это твой первый протокол. Но если его освоить, то этот мир, мир протоколов, не становится больше проблемой.
Ага! Можно! Только прийдется написать свой requests %))))
WAP190779Смысл есть, но новичок не вывезет это всё. Тут учиться надо. HTTPS не считается сложным. Это HTTP, который упрятан под слой шифрования. Сначала устанавливается этот процесс шифрования, потом по этой трубе пускается обычный HTTP-трафик. Так вот, если ты протоколы не писал (реализации протоколов; да и сами протоколы тоже можно придумывать, это тоже не сложно), если ты не шифровал ничего (блочно, поточно, симметрично и нет), то, конечно, ты не напишешь это всё, потому что оно включает все эти элементы в себя одновременно. Поэтому для тебя нет смысла писать это на сокетах. Но это не значит, что в этом нет смысла ни для кого.
Спасибо дружище. Дошло, кажысь. Да, с HTTP все работает. С HTTPS нужно еще пройти процесс шифрования.
Отредактировано py.user.next (Дек. 19, 2023 01:36:20)
Офлайн