sunucu motorunda varsayilan olarak boyle bir fonksiyon mevcut, istersen ozellestirebilirsinde. apache de sanirim ana config dosyasinda bu ayar tutuluyordu. net hatirlayamiyorum ama, ufak bi arastirma ile cozebilirsin. mobil link atacaktim ama yapismiyor niyeyse. sunucun neyse sonuna "error log customize" yazip aratsan yeterli.
ister bir sinif olustur, ister bir obje her ikisi icinde kullanim aynidir. sinif.yontem veya obje.anahtar, bu durumda hizli sonuc almak icin obje icerisinde anonim fonksiyon yazmak son derece onemli bir hal aliyor; cunku cok pratik. bunun yani sira kullanim kolayligi da goz ardi edilemeyecek seviyede, herhangi bir sinif icerisinde bir yonteme erismek icin cesitli kurallara bagli kalarak kod yazilir, obje icerisinde dikkat etmen gereken seylerin sayisi cok daha azdir. farki daha iyi anlamak icin bir sinif yaz, daha sonra bir de obje olarak hazirla. kendin gor.
css ile bir mod degiskeni ve renk paleti tanimla. tarayicida sadece modun adini veya id degerini sakla, css de tanimli bu degiskenleri js ile manipule et. bu kadar. ornek bir calisma da inceleyebilirsin codepen gibi bi platform da "dark mode" aramasi yaparak.
file_exits bu is icin yeterli. sorun donguden kaynakli, ayni deger 2 defa sorguda isleniyor ve ilkinde yokken olustuulup ikinci dongude var oldugu icin hata aliyorsun. kodlar dogru, bakis acin yanlis.
ne insanlar var ya, okumadan cevap yazmış herkes.
sorunun sebebini hala anlamış değilim, yinede çözüldü. işletim sistemini güncelledim, bazı unicode karakterleri görüyor bazılarını görmüyordu tarayıcı ve charset fark etmeksizin. muhtemelen debian da eksik kalmış bazı paketlerden kaynaklanıyor bilemiyorum. bilgisayarı formatlayınca sorun çözüldü.
kontrolü sadece if olarak belirttiğinde bazı durumlarda tutarsız davranabiliyor, eşittir dediğinde ise true değerini değişken tanımlı olarak algılaması da mümkün. bool değerlerle çalışırken denktir kullan.
is_loggedin() === true ? print("giriş yapıldı") : die("yetkisiz giriş");
bunu bi test eder misin?
document.querySelectorAll('#btn-1, #btn-2').forEach( btn => {
btn.addEventListener('click', event => {
alert(event.target.id)
})
});
@trsherlock madem çözdün, kodunu ekleyip çözüldü yapsaydın ya. boşuna uğraştım : ) senin örneğin ile benim örneğimin çalışma prensipleri aslında aynı, farkı anlamak için senin kodunu çalıştırdım; aynı sonucu aldım 302. benim örneğimde de 302'yi tek tek takip ettiğim kısmı atarsak, aslında kodlama aynı kodlama. gözden kaçırdığım ne var burada anlamadım. madem senin ki çalışıyor, benimki de çalışmalı. niye giriş yapmıyorlar? başta bir şeyi eksik yaptım diye düşündüm ama, bi saniye şimdi anladım. id değerinizi bildiğiniz için, manuel istek gönderiyorsunuz muhtemelen. bu da buraya eklediğiniz kodun eksik olduğu anlamına geliyor, eğer şöyle yaparsam;
$this->url = 'https://uygulama.parasut.com/accounts/426236/account';
$this->curlGet(["curl" => $c, "post" => false]);
evet giriş yaptım
bunu en başta da yapabilirdim, önceki mesajda belirtmiştim {id}/account
a yönlendirmesi gerekiyor diye. elle url girmek doğru gelmedi bana, bu yüzden bana göre benim sınıfım hala başarısız; giriş yaptığı halde. hadi üşenmeyim başarılı hale getireyim dedim ama, curl ile bağlanırken, site beklenildiği gibi çalışmıyor. post istediğinin ardından alınan son 302'nin ardından https://uygulama.parasut.com adresine yapılan yönlendirmenin sayfayı accounts/426236/account
a yönlendirmesi gerekiyor. ama yönlendirmiyor. header da konuyla alakalı bilgi çıktılamadığı için, neticede elle url girmekten başka çare bırakmıyor gibi duruyor. neyse. çözdüğün halde bile eksik kod göndermen enteresan, konuyu hortlatan arkadaşa bari yardım için bıraksaydın kodu. diğer arkadaş için çalışan tam kod örneğini aşağıya bırakıyorum, eposta, şifre ve id bilgilerini düzenlemeniz yeterli olur;
error_reporting(E_ALL);
class Parasut{
private $url = 'https://uygulama.parasut.com/kullanici-girisi';
private $eposta = '[email protected]';
private $sifre = 'parasut';
private $id = 426236;
private $hatirla = 0;
function giris(){
$curl = $this->curlCustom();
echo $curl["status"] === true ? $curl["output"] : "curl bağlanamadı";
}
private function curlCustom(){
$c = curl_init();
$this->curlGet(["curl" => $c, "post" => false]);
$sonuc = curl_exec($c);
if(curl_getinfo($c, CURLINFO_RESPONSE_CODE) === 200){
preg_match('/name="authenticity_token" value="(.*?)"/si', $sonuc, $token);
$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,
"data" => http_build_query($data)
]);
curl_exec($c);
$this->url = sprintf('https://uygulama.parasut.com/accounts/%d/account', $this->id);
$this->curlGet(["curl" => $c, "post" => false]);
$curlInfo = array(
"status" => true,
"request" => curl_getinfo($c,CURLINFO_HEADER_OUT),
"output" => curl_exec($c),
"token" => $token[1]
);
}else{
$curlInfo = array("status" => false);
}
curl_close($c);
return $curlInfo;
}
private function curlGet($init){
$key = $init["post"] === true ? CURLOPT_POSTFIELDS : CURLOPT_HEADER;
$val = $init["post"] === true ? $init["data"] : false;
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_POST => $init["post"],
CURLOPT_COOKIESESSION => true,
CURLOPT_COOKIEJAR => './cerez',
CURLOPT_COOKIEFILE => './cerez',
$key => $val
]);
}
}
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 = '[email protected]';
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_FOLLOWLOCATION => $init["post"],
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?