Я посмотрел на этот конкретный API, и сначала вы должны создать «поиск». Это то, чем является ваш lg8jphV - конечная точка должна существовать, прежде чем вы сможете ее открыть. Например, в моем тесте URL моего веб-сокета был wss://www.pathofexile.com/api/trade/live/Metamorph/Ab3LSL
Сначала опубликуйте запрос в https://www.pathofexile.com/api/trade/search/Metamorph
. Ваше тело должно выглядеть примерно так (кроме указанных вами c условий поиска):
{
"query": {
"status": {
"option": "online"
},
"stats": [
{
"type": "and",
"filters": []
}
],
"filters": {
"type_filters": {
"disabled": false,
"filters": {
"category": {
"option": "weapon.bow"
}
}
},
"misc_filters": {
"disabled": false,
"filters": {
"shaper_item": {
"option": "true"
}
}
}
}
},
"sort": {
"price": "asc"
}
}
Это создаст ваш реальный объект поиска, и вы получите тело ответа обратно, как это:
{
"result": [
"48c83eb427f369f6ddde8689d7458f6bf5a8380eed114b72b5a7a298651c4d65",
"6314ac7c88b143b80c777d23cdc12bb9d86e8bb82d8073f659132bf492fa69fe",
"1c39870f03505acaecd78dc0cc2a498a3a1037cd88b0035e3601e35140b59450",
"3dc8cf428d842a8be12953c6d2db117e5db4456cb6d3b75f5280ca8fb687c587",
"9470cc63efbe4ca192103200ad78734784a218c68b9d9ead0be456a98260394f",
"798ba0699085a63359c459cc89cafbbe28653fe893dfb6a9ba71162fd4d7aa51",
"dab3edc9c28723decc76ba56eb988c7f245ce15041640dca461124918dafbc90",
"06da5889c8cbf295ab13e103dfa9e291b3e0caf0256b398ccaec9ddfdb1e56c4",
"... continues ..."
],
"id": "Ab3LSL",
"total": 100000,
"inexact": true
}
Теперь у вас есть конечная точка поиска по идентификатору.
Наконец, когда вы делаете запрос, вам нужно установить заголовок Origin, или вы получите 403 Forbidden (вам придется изменить пакет nuget, который вы используете для https://www.nuget.org/packages/websocket-sharp-customheaders, если вы хотите продолжать использовать websocket-sharp). Не забывайте своего повара ie, иначе вы получите 401 несанкционированный
using (ClientWebSocket ws = new ClientWebSocket())
{
Uri serverUri = new Uri($"wss://www.pathofexile.com/api/trade/live/Metamorph/D4bWwf5");
//setting headers the way I did below only works because I used reflection to change the IsRequestRestricted bool to false
ws.Options.SetRequestHeader("Cookie", "__cfduid=d4a76bfa2583a39474272974006edad461580748134; _ga=GA1.2.477754083.1580748162; _gid=GA1.2.2011499591.1580748162; stored_data=1; _sm_au_c=krZJcAOlyMvVNsrvCJ4mJyGIu8S0KVB4Lr7aqcW0VB9UgAAAAa68dX6r0DT/Ta5U0B4NfCgZ2Jm/2q8R651XMxiBtJsM=; cf_clearance=e6964bd6eaed12c405c1b9b8a2b2f08d506b4926-1580761181-0-150; POESESSID=a2c44ee2111904215ccef8c69b2e72b5");
ws.Options.SetRequestHeader("Origin", "https://www.pathofexile.com");
ws.ConnectAsync(serverUri, CancellationToken.None).Wait();
Task.Run(async () =>
{
ArraySegment<byte> inbound = new ArraySegment<byte>(new byte[1024]);
while (ws.State == System.Net.WebSockets.WebSocketState.Open)
{
var wsRes = await ws.ReceiveAsync(inbound, CancellationToken.None);
if (wsRes?.Count > 0)
Console.WriteLine(Encoding.UTF8.GetString(inbound.Array, 0, wsRes.Count));
}
});
Console.WriteLine("WEB SOCKET OPEN; HIT ENTER TO EXIT");
Console.ReadLine();
}
Вы можете запустить приведенный выше фрагмент кода, просто замените куки на свои собственные куки. Это также грубое подтверждение концепции с использованием встроенного клиента веб-сокета.
Снимок экрана: