@freeeeez

Почему в парсере перестают работать куки или как изменить чтобы работало?

Есть сайт на ASP.NET с системой авторизации, нужно получать информацию как авторизованный юзер. При авторизации в браузере присваиваются куки и id сессии. Я их бросаю на сайт обычным запросом на CURL и все работает ровно сутки! Потом опять авторизуюсь в браузере, подставляю новую куку и опять сутки работает. И так продолжается 3-5 дней и потом все, чтобы я не делал куки из браузера перестают подходит, хотя я делаю все тоже самое и запрос отдает ответ:
<h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2>\r\n
<h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>


Через неделю где-то сайт опять начинает отдавать куки которые подходят для запроса Curl и все опять начинает работать. Куда копать? Подскажите кто знает, что я делаю не так? Может есть какая то особенность ASP.NET в авторизации. Или я изобретаю велосипед и есть способы проще получить данные?

Заголовки запроса
General
Request URL: https://site.ru/DataItemGet?appid=y8H3Vuv_nOx1vVR&t=1635752192
Request Method: POST
Status Code: 200 OK
Remote Address: 192.168.0.1:443
Referrer Policy: strict-origin-when-cross-origin

Response Headers
Access-Control-Expose-Headers: Request-Context
Cache-Control: private
Content-Encoding: gzip
Content-Type: application/json; charset=utf-8
Date: Mon, 01 Nov 2021 07:35:54 GMT
ntCoent-Length: 561207
Request-Context: appId=cid-v1:699c994c-9aca-4b75-acb9-356556246c7f
Server: Microsoft-IIS/10.0
Transfer-Encoding: chunked
X-Powered-By: ASP.NET

Request Headers
Accept: text/plain, */*; q=0.01
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7,lt;q=0.6,de;q=0.5
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 123
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: ai_user=KG2Is|2021-10-29T11:50:12.226Z; .AspNet.Cookies=bz7gK0L7lQf5Y3noooafTvXA5avZHCIKt_bRL-MDBjwQtffO-dONkVtbEI1OcgBTfhp3H4jK0gOzRIRBjH-VOur0N1NOeDYPdItU_FZdbxJIhQqaqg3Pfqcwfsfu4lL7eVdNN9m9W1k_V_L6nqT4g87mLb8YCw4qz4gceBBYz848yrg1SmX7wMMAbsQ9Q_1uzd0TwFgDxwWk_ZqRvak65nmi-WXooy5DrjaqcyK10DIjZwDHamsZXV2ddcQdMR0iGpn1J-b9-A-spe0O_JMTsQLCWS84CkSQaLXjqkhJSpnsGCiWeFVnaBWeyBq88a3-mQwCjtJkQdznrDKlbP8VOneEiMUGwXuWltyVSzo8c3qPG3Fq6u4qkyjNdv8boTVZ; ASP.NET_SessionId=xgsinag3sqrglk35virjq40m
Host: site.ru
Origin: https://site.ru
Pragma: no-cache
Referer: https://site.ru
sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"
sec-ch-ua-mobile: ?0
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36

Query String Parameters
appid: y8H3Vuv_nOx1vVR
t: 1635752192

Form Data
{"methodName":"ListLot","withParams":true,"fullDataSet":true,"persistParamSet":false}:


Код скрипта CURL
$array = array(
	"methodName"=>"ListLot",
	"withParams"=>true,
	"fullDataSet"=>true,
	"persistParamSet"=>false
);        
$curl = curl_init('https://site.ru/DataItemGet');
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($array)); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
"Content-Type: application/x-www-form-urlencoded; charset=UTF-8",
'Cookie: ai_user=KG2Is|2021-10-29T11:50:12.226Z; .AspNet.Cookies=bz7gK0L7lQf5Y3noooafTvXA5avZHCIKt_bRL-MDBjwQtffO-dONkVtbEI1OcgBTfhp3H4jK0gOzRIRBjH-VOur0N1NOeDYPdItU_FZdbxJIhQqaqg3Pfqcwfsfu4lL7eVdNN9m9W1k_V_L6nqT4g87mLb8YCw4qz4gceBBYz848yrg1SmX7wMMAbsQ9Q_1uzd0TwFgDxwWk_ZqRvak65nmi-WXooy5DrjaqcyK10DIjZwDHamsZXV2ddcQdMR0iGpn1J-b9-A-spe0O_JMTsQLCWS84CkSQaLXjqkhJSpnsGCiWeFVnaBWeyBq88a3-mQwCjtJkQdznrDKlbP8VOneEiMUGwXuWltyVSzo8c3qPG3Fq6u4qkyjNdv8boTVZ; ASP.NET_SessionId=xgsinag3sqrglk35virjq40m',
));

$response = curl_exec($curl);

$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $headerSize);
$header = headersToArray($header);
$body = substr($response, $headerSize);


$result = json_decode($body);
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
@freeeeez Автор вопроса
Решил вопрос используя Headless Chrome, пришлось конечно заморочиться, но это того стоило
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
1. используй CURLOPT_COOKIEJAR и CURLOPT_COOKIEFILE
2. у кикис заканчивается срок жизни и поэтому они становятся не действительными т.ч. лучше перелогиниваться при каждом сеансе, а потом отправлять остальные запросы с тем же дескриптором $curl
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы