Отправка запроса защищенного (SSL) веб-сокета с использованием Python и библиотеки websocket-client и в надежде лучше понять, что происходит - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь создать и отправить запрос websocket с использованием Python и библиотеки websocket-client, но я хочу понять, почему я продолжаю получать код 400 или 502 или время ожидания соединения при попытке разных вариантов значения URL и заголовка.

Во-первых, я в некотором роде новичок в запросах веб-сокетов и не совсем разбираюсь в диагностике обычных старых HTTP-запросов.

К счастью, имеется отладочная информация, которая позволяет мне просматривать запрос в виде простого текста.

Честно говоря, сейчас я просто бросаю дротики в доску наугад, настраиваю URL-адрес веб-сокета и значения заголовков, но очень хотел бы знать, как к этому подходить систематически.

Для более широкого контекста, вот репозиторий github, который я пытаюсь адаптировать (в основном, я пытаюсь абстрагироваться от наиболее фундаментальных частей кода, чтобы понять, как он работает, и заставить работать максимально простую версию - без любой из наворотов).

https://github.com/odsum/TinyChatBot

Это пример запроса, отправляемого на общий / универсальный URL-адрес tinychat (со стандартным портом SLL 443)

cookies: <RequestsCookieJar[<Cookie hash=79d26a617642869dcbf218289211945c for .tinychat.com/>, <Cookie pass=925c6a6f825421f84bd0e68e4fdd404b for .tinychat.com/>, <Cookie tcuid=rB8UtFxM4FGx2ka1BMmrAg== for .tinychat.com/>, <Cookie user=cooldudeusername for .tinychat.com/>, <Cookie XSRF-TOKEN=eyJpdiI6ImhUeU1cL3NXMzJVQXRsTVh6a1NkdGFBPT0iLCJ2YWx1ZSI6IndiN1ZYbEJQOTZHYXpjUVFcL25SU1BPcTV6Y2tKbVRUYTV1NHJ5cWxXeXNRMGIwNnl0WDNEeU9wZXUrdEdTTWkwd0xNK09VcFhDRnpsd3dXTE1JY0l1UT09IiwibWFjIjoiYjdlZmIxNWNhNTJkYzczOTYzYTk2Nzg5MjQyODhhZGE2NTIxZDQ5Nzk3NWRhOTg5NGExNDkwM2JiYjk2NjFkNyJ9 for tinychat.com/>, <Cookie remember_82e5d2c56bdd0811318f0cf078b78bfc=eyJpdiI6Ik1rbzIxWGRDdTBrN1huMFp1RzZleXc9PSIsInZhbHVlIjoibHI3NTROcFc4V3pYSk90K2RValZwdjRvSml2K1wvdVhNSHd5SDZKWFdZaEZ6Qk4wVHFTa1EybzIySXQ4RzN0R3R5VTJqMGR2QlUySkVxWG9sWmNBUTdreTF0NTdVV0hcLzdTa1dIbHVsQVU5d1wvYVhmZFRhRTkzaXFqaFBzaWFET04iLCJtYWMiOiJlNmUzOTYzNjA0YWU5YTEzOTlkZTdhZTc2NjhlYzQ2OWQ5MGJhZWI2OGQ4MTUzNjNiNjQwYTEyZmQ3MmY1NTkxIn0%3D for tinychat.com/>, <Cookie sm_dapi_session=1 for tinychat.com/>, <Cookie tcsession=3de8c7d90f323fcc4753d764722d6582649f34f6 for tinychat.com/>]>

--- request header ---
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: wss.tinychat.com:443
Origin: https://tinychat.com
Sec-WebSocket-Key: XlfPqPAzStqTbVg2Y4lxBQ==
Sec-WebSocket-Version: 13
User-Agent
Connection
Cache-Control
Accept
Accept-Language
Accept-Encoding
Sec-WebSocket-Protocol
Sec-WebSocket-Extensions

-----------------------
--- response header ---
HTTP/1.1 502 Bad Gateway
Server: awselb/2.0
Date: Sat, 26 Jan 2019 22:33:54 GMT
Content-Type: text/html
Content-Length: 138
Connection: keep-alive
-----------------------

В следующем примере используется динамически сгенерированный URL-адрес WSS, который имеет уникальный поддомен и порт (который выбирается ранее в коде).

cookies: <RequestsCookieJar[<Cookie hash=af9b5641e1fffed6c3f7ca8b74c29b54 for .tinychat.com/>, <Cookie pass=414fc913a67cf4fdc59f93f117e98e2c for .tinychat.com/>, <Cookie tcuid=rB8UtFxM4Ymx2ka1BMtqAg== for .tinychat.com/>, <Cookie user=cooldudeusername for .tinychat.com/>, <Cookie XSRF-TOKEN=eyJpdiI6Im9RckxrVDFmbllEaE5QeXlKUVBDZXc9PSIsInZhbHVlIjoiQUFwRkdwVXE5NFwvYk43Z0NnY3BJbnlJZzRWQWZDMEZHNFgrbG1nMUJOOG84dFwvYWk0N3dXNDcya3hyaXBcLzdSODRCOGpUbnVoNHdNRGJ2eDhTRitwZXc9PSIsIm1hYyI6IjA2YjFjYmY3OGI4MGE5MTljNjI4MmE2ZWJkYzI0YTdkZWQ2N2MxOWNkNTM4ODZmYTg1Mjc4ZjViNTlmNjU3NTAifQ%3D%3D for tinychat.com/>, <Cookie remember_82e5d2c56bdd0811318f0cf078b78bfc=eyJpdiI6IloyRDluMHV6dGlJY3dUeHB5VFNnaFE9PSIsInZhbHVlIjoieXRLUWhXY2NRcjNHOTdoN1lQMXVIOW9zZUpcL1ZaWXg2XC9vZ0x3K3BjUnRtcEh6ZFNzNEh1SUgrR1FId0hiTTB6ZEtkMThUWFhGcXlYUko5T0xXYU5wUUYrMHBcL0NWTWtUXC9nMVloNWR0NDZqU1B1UlI1UU9Ic2dCNHExTmUyVG1XIiwibWFjIjoiMmEyZTc0OTg3ZDBhMzUyOTU0NzAyZmY5MzM2ZTQ5MDIxOTFhYjJjOTY1NWZlOTJhODFkZmI4ODk0ZGMwN2NiZCJ9 for tinychat.com/>, <Cookie sm_dapi_session=1 for tinychat.com/>, <Cookie tcsession=ad801ba583d0ce703a8d1cf313fe75f86a036ea3 for tinychat.com/>]>

--- request header ---
GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: wss0703.tinychat.com:27857
Origin: https://tinychat.com
Sec-WebSocket-Key: ha4h+9adTDWAitNtimMy7Q==
Sec-WebSocket-Version: 13
User-Agent
Connection
Cache-Control
Accept
Accept-Language
Accept-Encoding
Sec-WebSocket-Protocol
Sec-WebSocket-Extensions

-----------------------
--- response header ---
HTTP/1.0 400 Bad request
Cache-Control: no-cache
Connection: close
Content-Type: text/html
-----------------------

Я пробовал другие варианты, но нет смысла вставлять здесь код, показывающий каждый сценарий, потому что существует потенциально бесконечное количество возможностей.

Когда дело доходит до настройки заголовков (будь то добавление других, удаление некоторых из них или изменение значений для уже имеющихся в миксе), я просто не знаю, как принять обоснованное решение в этом отношении.

(Кстати, это мой первый пост с переполнением стека ... довольно волнительно, не буду врать).

1 Ответ

0 голосов
/ 28 января 2019

Хорошо, у меня все получилось.

Как оказалось, большинство из этих значений заголовка были не только совершенно ненужными, но некоторые, возможно, даже ошибочными, неточными или иным образом некорректными.

Кроме того, куки были совершенно ненужными.

Для всех, кто может столкнуться с этим - Краткий урок по файлам cookie в их самой фундаментальной природе:

Файлы cookie могут, и, по-видимому, часто состоят из одной строки токенов, которая динамически генерировалась в начале сеанса, но должна отправляться с каждым последующим запросом.

Таким образом, токен можно хранить в памяти в виде простой переменной, а не явно использовать файлы cookie библиотеки запросов.

Здесь есть еще несколько полезных сведений о файлах cookie: https://www.sohamkamani.com/blog/2017/01/08/web-security-session-cookies/

...