konuyu aktif görünce çözeyim istedim ama gözden kaçırdığım bir şeyler var sanırım. teoride çalışması gereken bir sınıf yazdım. ama umduğumdan fazla yönlendirme mevcuttu, önce followlocation ile takip edeyim dedim, baktım ki doğrulama için gereken çerez her yönlendirilmede yenisiyle değişiyor. o zaman sırasıyla takip edeyim dedim, son yönlendirmede id ile alakalı bir bağlantı vermesi daha sonrasında bunu {id}/account/
şeklinde yönlendirmesi gerekiyordu ama, 200 için doğrudan giriş sayfasına yönlendirdi. sanırım curl ayarlamalarındaki çerez yapısını kaldırıp, ilk bağlantıda üst bilgiden okuyarak devam etmem gerekiyordu. küçük bir ihtimal de refereransları doğru belirtmedim bundan da kaynaklanabilir. sıfırdan bir daha yazayım diye düşündüm ama, enerjim kalmadı. devam etmek isteyen varsa benim örneğim;
error_reporting(E_ALL);
class Parasut{
private $url = 'https://uygulama.parasut.com/kullanici-girisi';
private $eposta = 'ozcandogan1990@gmail.com';
private $sifre = 'parasut';
private $hatirla = 0;
function giris(){
$curl = $this->curlCustom();
echo $curl["status"] === true ? $curl["output"] : "hata";
}
private function curlCustom(){
$c = curl_init();
$this->curlGet(["curl" => $c, "post" => false, "cookie" => 0]);
$sonuc = curl_exec($c);
if(curl_getinfo($c, CURLINFO_RESPONSE_CODE) === 200){
$httpRequest = preg_replace('/^.+\n/', '', curl_getinfo($c,CURLINFO_HEADER_OUT));
preg_match('/name="authenticity_token" value="(.*?)"/si', $sonuc, $token);
preg_match('/_parasut_session_production_(.*?)$/si', file_get_contents('./cerez'), $cerez);
$cerez = "_parasut_session_production_=".trim($cerez[1]);
$data = array(
"authenticity_token" => $token[1],
"user[email]" => $this->eposta,
"user[password]" => $this->sifre,
"user[remember_me]" => $this->hatirla,
"commit" => "OTURUM AÇ"
);
$this->curlGet([
"curl" => $c,
"post" => true,
"cookie" => $cerez,
"data" => http_build_query($data)
]);
$sonuc2 = curl_exec($c);
$httpRequest2 = preg_replace('/^.+\n/', '', curl_getinfo($c,CURLINFO_HEADER_OUT));
if(curl_getinfo($c, CURLINFO_RESPONSE_CODE) === 302){
$reg = $this->cookieRegex([$httpRequest2, $sonuc2]);
$this->url = $reg[1];
$this->curlGet([
"curl" => $c,
"post" => false,
"cookie" => $reg[0],
]);
$sonuc3 = curl_exec($c);
$httpRequest3 = preg_replace('/^.+\n/', '', curl_getinfo($c,CURLINFO_HEADER_OUT));
if(curl_getinfo($c, CURLINFO_RESPONSE_CODE) === 302){
$reg = $this->cookieRegex([$httpRequest3, $sonuc3]);
$this->url = $reg[1];
$this->curlGet([
"curl" => $c,
"post" => false,
"cookie" => $reg[0],
]);
$sonuc4 = curl_exec($c);
$httpRequest4 = preg_replace('/^.+\n/', '', curl_getinfo($c,CURLINFO_HEADER_OUT));
}
}
$curlInfo = array(
"status" => true,
"request" => [$httpRequest, $httpRequest2, $httpRequest3, $httpRequest4],
"output" => $sonuc4,
"token" => $token[1]
);
}else{
$curlInfo = array("status" => false);
}
curl_close($c);
return $curlInfo;
}
private function cookieRegex($header){
preg_match('/cookie: _parasut_session_production_=(.*?)authority/si', $header[0], $cerez);
preg_match('/Location: (.*?)Cache/si', $header[1], $url);
return array(trim($cerez[1]), trim($url[1]));
}
private function curlGet($init){
$key = $init["post"] === true ? CURLOPT_POSTFIELDS : CURLOPT_HEADER;
$val = $init["post"] === true ? $init["data"] : true;
return curl_setopt_array($init["curl"], [
CURLOPT_URL => $this->url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLINFO_HEADER_OUT => true,
CURLOPT_HTTPHEADER => $this->getHeaders($init["cookie"]),
CURLOPT_POST => $init["post"],
CURLOPT_COOKIESESSION => true,
CURLOPT_COOKIEJAR => './cerez',
CURLOPT_COOKIEFILE => './cerez',
CURLOPT_COOKIE => $init["cookie"],
$key => $val
]);
}
private function getHeaders($cerez){
return array(
'authority: uygulama.parasut.com',
'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'accept-language: tr-TR,tr;q=0.9,en-US;q=0.8,en;q=0.7',
'cache-control: max-age=0',
'content-type: application/x-www-form-urlencoded',
"cookie: $cerez",
'origin: https://uygulama.parasut.com',
'referer: https://uygulama.parasut.com/kullanici-girisi',
'sec-ch-ua: ".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"',
'sec-ch-ua-mobile: ?0',
'sec-ch-ua-platform: "Windows"',
'sec-fetch-dest: document',
'sec-fetch-mode: navigate',
'sec-fetch-site: same-origin',
'sec-fetch-user: ?1',
'upgrade-insecure-requests: 1',
'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
);
}
}
edit: api hazırlamışlar https://apidocs.parasut.com/ işinizi görmüyor mu, neden kullanmıyorsunuz?