Найти - Пользователи
Полная версия: socket отправка http request
Начало » Python для новичков » socket отправка http request
1
WAP190779
Всем привет! Можно ли отправить 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))
ZerG
Вы не можете посылать хттп запросы напрямую через сокеты это принципиально разного уровня протоколы и инструменты в целом
Сокет если абстрактно - соединение
То есть вы можете создать соединение а дальше необходимо послать понятный веб серверу вопрос что бы получить ответ
Именно так сокеты и используется. Пишется сервер и клиент - создается между ними соединение и пускаются данные. Данные описываются и разбираются по этому это работает
Вы ведь не используете 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()

То есть получается масло масленное
py.user.next
WAP190779
Можно ли отправить http request только с помощью socket?
Можно отправить. Только сначала изучи разницу между HTTP и HTTPS. Можешь также сниффер задействовать, чтобы узнать, что именно передаётся в пакетах.
ZerG
py.user.next
Ага! Можно! Только прийдется написать свой requests %))))
WAP190779
py.user.next
Спасибо дружище. Дошло, кажысь. Да, с HTTP все работает. С HTTPS нужно еще пройти процесс шифрования.
py.user.next
ZerG
Ага! Можно! Только прийдется написать свой requests %))))
Лет десять назад я изучал одну историю, где парень писал аську. Я ещё думал, что это сложновато и не нужно. В итоге он написал развитый клиент, мультиаську. Для этого нужно было всего лишь изучить этот протокол. Да, на изучение уйдёт много времени, да, он непростой (там много всяких слоёв). Ещё хуже, если ты никогда не писал никаких протоколов и это твой первый протокол. Но если его освоить, то этот мир, мир протоколов, не становится больше проблемой.

Например, сейчас, ты, чтобы общаться в любом из мессенджеров, должен ставить официальный клиент либо сторонний клиент. У них есть плюсы и минусы. И вот ты сидишь и выбираешь: либо я эти минусы буду хавать, либо я эти минусы буду хавать, третьего не дано. Других клиентов-то нет, а мессенджер нужен. И вот как раз опыт обуздания протоколов тут приходит на помощь и ты можешь создать свой клиент. Это сторонний клиент, только в котором нет никаких минусов. После этого ты его создаёшь, потом начинаешь потихоньку пользоваться и вот ты уже наблюдаешь крики пользователей вокруг, что опять что-то там неправильно обновилось или не работает то в официальном клиенте, то в стороннем клиенте, в то время как у тебя всё в порядке в твоём личном самодельном стороннем клиенте и он работает как часы.

Я такое наблюдал несколько раз. Как-то и официальное приложение я заменил на своё приложение, чтобы просто трафик у себя экономить. Нативное приложение качало много каких-то картинок и эмблем, анимированных роликов, поэтому я решил это исправить, чтобы не тратить свой трафик на это. А потом оказалось, что официальное приложение из-за прорисовки красивостей стало ещё больше тормозить и стало вообще скрывать часть объектов, которые нужно видеть, потому что их нельзя было нарисовать полностью красиво, так как у них части в виде картинок не докачались, а это условие было обязательным, так как некрасивых объектов допускать было нельзя - наругают. А при этом моя версия приложения продолжала показывать всё неизменно, все объекты были на своих местах, вот данные по ним, всё актуально. Моя версия не рисовала ничего и не ставила красивости во главу угла. Ну можешь себе представить, как классно сидеть пользователю и ждать красивостей, потому что без них ничего не грузится из того, что ему надо узнать, для чего он и пользуется приложением этим вообще. Это я тебе рассказываю, чтобы ты понимал, как можно становиться заложником чьих-то страхов или чьего-то жополижества. Кто-то кого-то боится - хуяк, поломал полпрограммы, чтобы не бояться. А ты, как лох, сидишь и ждёшь, когда же она принесёт тебе данные. Но ты и должен ждать, потому что без этой программы ты никто, ты - ноль. Это справедливо. Но когда ты можешь создать альтернативу, то тут уже твоё положение меняется. И тут уже лохи - вот эти, которые пугают и которые их пугаются.

Так вот requests или http.client вроде классно подходит. Ну да. Ты создал запрос, превратил его в данные и потом эти данные передаёшь по сокету. Ответ ты тоже воосстанавливаешь через requests или http.client. А вот к тебе попадает робот, который будет сидеть где-нибудь в здании. В нём нужно сделать всё то же самое, а на него не ставится ничего, питон не ставится, библиотеки не ставятся. Что ты будешь делать? Да ничего ты не будешь делать. Ты будешь только говорить, что этот робот - говно, потому что он несовременный и так далее. Ты же не можешь, без requests или http.client ты никто, они за тебя всю работу делают всегда. А без них ты полный ноль. Но вот что делать, если кроме этого робота-говноробота ничего нет, а на нём только сокеты есть? И вот тут-то на помощь тебе и приходит образование, опыт, тренировочки. Тут-то ты и делаешь для этого робота программку, а код для неё берёшь из вот такого приложения, которое ты когда-то там писал, в котором обмен происходит без всяких библиотек. И в результате у тебя есть робот, который стоит в здании и работает со всеми современными сайтами. Ты не стоишь с протянутой рукой, чтобы тебе дали циску там какую-то и прочие продукты, без которых ты ничего собрать не можешь. А тебе ещё и не дадут, потому что надо будет тебя пошантажировать, получить что-то с тебя бесплатно в ущерб только тебе, а себе - наоборот, в одни плюсики. Тебе что-то нужно, необходимо, а у тебя этого нет, а есть только у них, - всё, ты потенциальная жертва и кандидат на это дело. Будут с тебя дань какую-то собирать. Купи сертификат, купи то, купи это. И всё только у нас покупай!

Так что смысл есть в этом всём. Ничего так не портит разработку, как какой-нибудь тупорылый барьер посреди многолетнего проекта. Ты пишешь какую-нибудь банковскую низкоуровневую систему, а там в самом современном банке с голосовыми роботами и искусственным интеллектом внутри в банкомате стоит Windows XP, а в качестве шлюза стоит какая-то аппаратная параша из семидесятых годов, которая вообще ни одного языка не знает. Это сделано ради экономии, а ты не знал, что надо будет с этим работать, когда начинал, ты же видел суперразвитый банк в самом начале.

WAP190779
Спасибо дружище. Дошло, кажысь. Да, с HTTP все работает. С HTTPS нужно еще пройти процесс шифрования.
Смысл есть, но новичок не вывезет это всё. Тут учиться надо. HTTPS не считается сложным. Это HTTP, который упрятан под слой шифрования. Сначала устанавливается этот процесс шифрования, потом по этой трубе пускается обычный HTTP-трафик. Так вот, если ты протоколы не писал (реализации протоколов; да и сами протоколы тоже можно придумывать, это тоже не сложно), если ты не шифровал ничего (блочно, поточно, симметрично и нет), то, конечно, ты не напишешь это всё, потому что оно включает все эти элементы в себя одновременно. Поэтому для тебя нет смысла писать это на сокетах. Но это не значит, что в этом нет смысла ни для кого.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB