Пустая Data post запроса

SlipDez

Client
Регистрация
18.07.2018
Сообщения
453
Реакции
90
Баллы
28
Задача: Есть много ссылок на сайте в определенное время обновляется таймер необходимо узнать время обновления. Для этого пытаюсь Get/Post запросом спарсить Fetch/xhr. Чтобы получить данные сайта нужно авторизоваться через bearer token

Сложности: при попытке спарсить данные постоянно выдает пустую дату, раньше была ошибка 444 видимо был неккоректно указан токен входа. Сейчас просто пустая дата, перерыл 100500 тем на форуме, пробовал и гет и пост запросом и стандартными методами и через C# результат один и тот же.

Ниже прилагаю скрины (какие данные необходимо спарсить, гет запрос, пост запрос такой же, тип выводимых данных менял не помогает)

Код C#

Код C#:
Развернуть Свернуть Копировать
string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
string url = "https://backend-farm.plantvsundead.com/farms/61165735d3e71b001b34f632";
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 | System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;
// GET запрос
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest) System.Net.WebRequest.Create(url);
request.Method = "GET";
request.UserAgent = userAgent;
request.Headers.Add("Accept-Language", "en-US,en;q=0.5");
request.Headers.Add("Bearer Token", "тут токен ");
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse) request.GetResponse();

using (var read = new StreamReader(response.GetResponseStream())){
string data = read.ReadToEnd();
return data;
}


и результат один и тот же {"status":1,"data":{}} - пустая дата не json. При переходе по ссылке тоже самое выводит а в Fetch совсем другие данные.


Код который работает на питоне

Код на питоне:
Развернуть Свернуть Копировать
import requests

url = 'https://backend-farm.plantvsundead.com/farms/other/0xee5de8fe961b9d2599a1eea298db87be8768889d?limit=10&offset=30'

headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0",
            "Accept": "*/*",
            "Accept-Language": "en-US,en;q=0.5",
            "Connection": "keep-alive",
            "Authorization": "Bearer Token: ТОКЕН

response = requests.get(url, headers=headers)

print(response.text)


Можно сказать что это обычная браузерная игра. Ладу дать не могу. Помощи буду очень рад
 

Вложения

  • photo_2021-08-15_06-16-13.jpg
    photo_2021-08-15_06-16-13.jpg
    32,8 KB · Просмотры: 210
  • гет 1.png
    гет 1.png
    29,5 KB · Просмотры: 209
Попробуй изменить заголовки на
Код:
Развернуть Свернуть Копировать
request.UserAgent = userAgent;
request.Accept = "*/*";
request.Headers.Add("Accept-Language", "en-US,en;q=0.5");
request.Headers.Add("Authorization", "Bearer Token: ТОКЕН");
 
  • Спасибо
Реакции: SlipDez
Попробуй изменить заголовки на
Код:
Развернуть Свернуть Копировать
request.UserAgent = userAgent;
request.Accept = "*/*";
request.Headers.Add("Accept-Language", "en-US,en;q=0.5");
request.Headers.Add("Authorization", "Bearer Token: ТОКЕН");
Огромное спасибо получилось)
 
Возможно раньше сталкивались с такой задачей как можно понять в какое время обновляется таймер на сайте раньше обновлялся
Harvest Time а теперь как-будто рандомно. Возможно подскажите где стоит смотреть

81520
 
Попробуй изменить заголовки на
Код:
Развернуть Свернуть Копировать
request.Accept = "*/*";
Accept может так серьезно влиять на результат?
Надо бы и у себя парочку запросов перепроверить, может из-за него и бросает на клауд...
 
Accept может так серьезно влиять на результат?
Надо бы и у себя парочку запросов перепроверить, может из-за него и бросает на клауд...
Проблема была в том, что он неправильно указывал авторизацию по токену.
Accept может влиять, все зависит от настроек сайта.
Встречал сайт, на котором не проходили запросы из-за другого кол-ва черточек(в разделителе) в POST мультипарт запросе.

Возможно раньше сталкивались с такой задачей как можно понять в какое время обновляется таймер на сайте раньше обновлялся
Harvest Time а теперь как-будто рандомно. Возможно подскажите где стоит смотреть

Посмотреть вложение 81520
Если работаешь через прокси, то может из-за страны прокси(разный часовой пояс).
 
Здравствуйте, подскажите пожалуйста, как в этом коде
C#:
Развернуть Свернуть Копировать
string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
string url = "https://backend-farm.plantvsundead.com/farms/61165735d3e71b001b34f632";
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 | System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;
// GET запрос
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest) System.Net.WebRequest.Create(url);
request.Method = "GET";
request.UserAgent = userAgent;
request.Headers.Add("Accept-Language", "en-US,en;q=0.5");
request.Headers.Add("Bearer Token", "тут токен ");
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse) request.GetResponse();

using (var read = new StreamReader(response.GetResponseStream())){
string data = read.ReadToEnd();
return data;
}
указать свой заранее сохранённый профиль? Т.е. со всеми определёнными в нём куками и заголовками

и я правильно понимаю, что данный код имитирует запрос по последним стандартам защиты из браузера, т.е. для сайта это будет http 2.0 запрос? Спасибо
 
Здравствуйте, подскажите пожалуйста, как в этом коде
C#:
Развернуть Свернуть Копировать
string userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0";
string url = "https://backend-farm.plantvsundead.com/farms/61165735d3e71b001b34f632";
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 | System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;
// GET запрос
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest) System.Net.WebRequest.Create(url);
request.Method = "GET";
request.UserAgent = userAgent;
request.Headers.Add("Accept-Language", "en-US,en;q=0.5");
request.Headers.Add("Bearer Token", "тут токен ");
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse) request.GetResponse();

using (var read = new StreamReader(response.GetResponseStream())){
string data = read.ReadToEnd();
return data;
}
указать свой заранее сохранённый профиль? Т.е. со всеми определёнными в нём куками и заголовками

и я правильно понимаю, что данный код имитирует запрос по последним стандартам защиты из браузера, т.е. для сайта это будет http 2.0 запрос? Спасибо

Извините, я погуглил пару дней и понял, что этот вопрос полностью идиотский )

Новый вопрос - у кого есть опыт подключения сторонних .dll для реализации post/get через http/2 - отзовитесь пожалуйста! Очень нужен совет ) А именно - как это сделать (хотя бы в общих словах) и какие dll лучше брать? Спасибо
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)