Как я могу получить скрытый контент на сайте с помощью HttpWebRequest c #? - PullRequest
0 голосов
/ 07 апреля 2019

Я хотел бы получить скрытый контент с веб-сайта (номер телефона), номер телефона отображается, когда я нажимаю кнопку «Wyświetl numer» (Показать номер).У меня нет доступа к номеру при отправке HttpWebRequest.У меня ошибка 403.

Я заметил, что мне нужно запросить:

  • CSRF-Token - на исходном сайте,
  • phoneCode - на сайте Soruce,
  • куки: _csrf, _abck - в ответе от сервера

Например: https://www.otodom.pl/oferta/dom-posesja-z-wlasnym-stawem-blisko-gorzowa-ID3V94s.html

Номер: 515 185 943

Правильный ответ:

{"meta":{"status_code":200,"message":"Action applied successfully","created_at":"2019-04-07 02:48:54.480582966 +0000 UTC"},"data":[{"phone":"515185943","phonecode":"249-203-107-114-16-68-207-238-198-45-92-145-239-111-199-163-61-250-147-7-28-250-146-14-117-171-73-180-30-72-65-214-53-218-59-19"}]}

Мой код
Мой код работает от 1 до 3 раз для телефона или вообще.

Запрос _csrf, _abck

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://www.otodom.pl/oferta/dom-posesja-z-wlasnym-stawem-blisko-gorzowa-ID3V94s.html");
req.Timeout = 20000;
req.Method = "GET";
req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
req.Host = "www.otodom.pl";
req.KeepAlive = true;
req.Headers.Add("Upgrade-Insecure-Requests", "1");

WebResponse resp = req.GetResponse();
cookieHeader = resp.Headers["Set-cookie"]; //_csrf, _abck

Запрос на номер

HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create("https://www.otodom.pl/frontera/api/item/owner/phone/249-203-107-114-16-68-207-238-198-45-92-145-239-111-199-163-61-250-147-7-28-250-146-14-117-171-73-180-30-72-65-214-53-218-59-19");
getRequest.Method = "GET";
getRequest.Timeout = 20000;
getRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
getRequest.ContentType = "application/json; charset=UTF-8";
getRequest.Host = "www.otodom.pl";
getRequest.KeepAlive = true;
getRequest.Accept = "application/json, text/plain, */*";
getRequest.Headers.Add("Cookie", cookieHeader);
getRequest.Headers.Add("CSRF-Token", token);
getRequest.Headers.Add("SITECODE", "otodompl");
getRequest.Headers.Add("MICRO_LOCALE", "pl");
getRequest.Headers.Add("SITE_LANG", "pl");
getRequest.Headers.Add("SITESTAGE", "PROD");
getRequest.Headers.Add("SSR-Proxying-Atlas", "true");

WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
  strPhone = sr.ReadToEnd();
}

Понятия не имею, что не так ..

...