Форум сайта python.su
0
Нужно отправить запрос на удаленный сервер. Получение ответа пока не требуется, нужно понять как кодировать данные для отправки. Проблем с сомой отправкой нет. Я не как не могу понять как преобразовать сами данные, перед их отправкой. Если не сложно привести простой пример как это сделать на python3. Или может есть хорошая статья по этой теме.
Конечно есть готовые либы. Есть python-valve. Судя по всему это очень качественная либа. Но написана изначально на 2 версии языка. Вроде как должна работать на 3 версии, но то и дело то там, то там ошибка. И не работает с некоторыми с серверами.
Офлайн
253
А стандартный модуль struct не помогает?
Офлайн
0
Да, этот модуль используется в python-valve. Там просто жуткое количество encode… И разобраться в них не получается ->.
Офлайн
253
k0st1anНу я не знаю. Там реального кода строчек 30. Думаю меньше не получится с любым другим модулем. Если вы в этом не можете разобраться то вам остается только заказать другим эту работу.
И разобраться в них не получается
Офлайн
0
Не, не могу заказывать. Нужно самому… Всегда получалось и тут получится. )))
Офлайн
253
k0st1an
но то и дело то там, то там ошибка
k0st1anТогда
Нужно самому…
Офлайн
0
Я думал об этом. Но я сейчас работаю над одним проектом и терять время на этом не хочется. Пока я буду пользоваться своим костылем. Вот это кусок работает, получает данные. Теперь надо их в словарь раскидать
(мне то надо всего три значения выдернуть):
#!/usr/bin/env python3 import socket import struct import select host = ('a.b.c.d', 27015) host2 = ('localhost', 8888) BUFF = 1400 A2S_INFO = 0x54 A2S_PAYLOAD = 'Source Engine Query' BytesField = '<B' StringField = '<s' LongField = '<l' header = struct.pack(LongField, -1) request_type = struct.pack(BytesField, A2S_INFO) payload = A2S_PAYLOAD.encode(encoding='utf-8') packet = b''.join([header, request_type, payload, b'\x00']) print('header', header) print('request_type:', request_type) print('payload:', payload) print('packet:', packet) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.sendto(packet, host) r = select.select([s], [], [], 4) print(r[0][0].recv(BUFF))
Офлайн