v2.5.2
Giriş yap

NodJs veya Pph Curl ile Paraşüt web uygulamasına giriş?

trsherlock
1,183 defa görüntülendi

Merhaba arkadaşlar aşağıdaki web tabanlı Paraşüt ön muhasebe uygulamasına otomatik giriş yaptırmak istiyorum.

Php curl ile denemek istedim name = "authenticity_token" değeri de sayfada ile yüklendiği için direk giriş yaptırmadım. Oturum aç dediğim de arka planda post eder zannettim adres çubuğunu localhost/kullanici-girisi şeklinde değiştirerek post etti.
Beni aşan bir sorun yardımlarınız için şimdiden teşekkürler.

Paraşüt Giriş Bağlantısı
e-posta: [email protected]
şifre: parasut

<form class="new_user" id="new_user" action="/kullanici-girisi" accept-charset="UTF-8" method="post">
<input type="hidden" name="authenticity_token" value="smhvSLLINoDT4Y1KnXRU4NkXzRrcodaA8XHkSDKhMaYR6bDYjYKYJO5aUzet2hWZgoZ57FrglQytuR5oE4VAIA==">
<div class="l-col16 l-offset-s3 l-col-s10 l-offset-l5 l-col-l6">
<div class="form u-clearfix u-mt1 u-pv15">
<div class="form-content">
<input placeholder="E-posta Adresi" class="field" type="email" value="" name="user[email]" id="user_email">
<input placeholder="Parola" class="field u-mb1" type="password" name="user[password]" id="user_password">
<div class="u-textLeft u-pullRight u-pt05">
<input name="user[remember_me]" type="hidden" value="0">
<input class="u-pullLeft u-width1 u-mr025" style="margin-top:0.15rem;" type="checkbox" value="1" name="user[remember_me]" id="user_remember_me">
<label class="u-pullLeft" for="user_remember_me">Oturum açık kalsın</label>
</div>
<input type="submit" name="commit" value="OTURUM AÇ" class="button button-primary button-big u-pullLeft" id="Sign_In" data-disable-with="OTURUM AÇ">
</div>
</div>
</div>
</form>

NodeJs ile yaptığımda gelen sonuç: <html><body>You are being <a href="https://uygulama.parasut.com/tarayicinizi-guncelleyin">redirected</a>.</body></html>
Şifreyi hatalı post ettiğimde giriş sayfasının html sayfasını döküyor sanırsam Nodejs ile post başarılı fakat sorgu yapan tarayıcı ile ilgili bir problem.
Bu konuda da yardımcı olursanız sevinirim.

var request = require("request");
var HTMLParser = require('node-html-parser');


login()
function login() {
    var authenticity_token = {
        method: 'GET', url: 'https://uygulama.parasut.com/kullanici-girisi',
    };

    request(authenticity_token, function (error, response, body) {
        console.log(HTMLParser.parse(body).querySelector("input[name='authenticity_token']")["_attrs"]["value"])
        var options = {
            method: 'POST',
            url: 'https://uygulama.parasut.com/kullanici-girisi',
            qs:
            {
                authenticity_token: HTMLParser.parse(body).querySelector("input[name='authenticity_token']")["_attrs"]["value"],
                'user[email]': '[email protected]',
                'user[password]': 'parasut',
                'user[remember_me]': '0',
                commit: 'OTURUM AÇ'
            }
        };

        request(options, function (error, response, body) {
            if (error) throw new Error(error);
            console.log(body)
        });
    })
}
trsherlock
855 gün önce

Ben konuyu paylaştığım zamanlarda sorunu php tarafında çözmüştüm yalnız ben kullanıcı id bilgisini bildiğim için giriş yaptıktan sonra direk istek attırıyorum.
Aşağıdaki kodlar oturum açmak için.

    $parasut_login = curl_init();
    curl_setopt($parasut_login, CURLOPT_URL, "https://uygulama.parasut.com/kullanici-girisi");
    curl_setopt($parasut_login, CURLOPT_REFERER, "https://uygulama.parasut.com/kullanici-girisi");
    curl_setopt($parasut_login, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
    curl_setopt($parasut_login, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($parasut_login, CURLOPT_COOKIEJAR, "parasut.txt");
    curl_setopt($parasut_login, CURLOPT_COOKIEFILE, "parasut.txt");
    preg_match_all('<input type="hidden" name="authenticity_token" value="(.*?)">', curl_exec($parasut_login), $authenticity_token);
    
    curl_setopt($parasut_login, CURLOPT_URL, "https://uygulama.parasut.com/kullanici-girisi");
    curl_setopt($parasut_login, CURLOPT_REFERER, "https://uygulama.parasut.com/kullanici-girisi");
    curl_setopt($parasut_login, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]);
    curl_setopt_array($parasut_login, [
    CURLOPT_USERAGENT => "https://uygulama.parasut.com/kullanici-girisi",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERAGENT => $_SERVER["HTTP_USER_AGENT"],
    CURLOPT_POST => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_POSTFIELDS => [
        'authenticity_token' => $authenticity_token[1][0],
        'user[email]' => '[email protected]',
        'user[password]' => '****',
        'user[remember_me]' => '0',
        'commit' => 'OTURUM AÇ'
    ],
    CURLOPT_COOKIEFILE => 'parasut.txt'
    ]);
    curl_exec($parasut_login);

Aşağıdaki kodlar da satış faturalarını listelemek için...

$kid = 11111;
curl_setopt($parasut_login, CURLOPT_URL, "https://api.parasut.com/v4/$kid/sales_invoices?filter%5Barchived%5D=false&filter%5Brecurring%5D=false&filter%5Bquery%5D=&filter%5Bsharing_status%5D=&filter%5Bpayment_status%5D=&filter%5Bprint_status%5D=&filter%5Bissue_date%5D%5Bgteq%5D=" . date('Y-m-d', strtotime($donem)) . "&filter%5Bissue_date%5D%5Blteq%5D=" . date('Y-m-t', strtotime($donem)) . "&filter%5Bitem_type%5D=invoice%2Crefund%2Cestimate%2Cexport&filter%5Bcategory%5D=&filter%5Btag_ids%5D=&include=category%2Ctags%2Ccontact%2Cactive_e_document%2Cfailed_e_invoice&order_scope=order_by_remaining_desc&page%5Bnumber%5D=1");
curl_setopt_array($parasut_login, [
    CURLOPT_USERAGENT => "https://uygulama.parasut.com/",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERAGENT => $_SERVER["HTTP_USER_AGENT"],
    CURLOPT_POST => false,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_MAXREDIRS => 0,
    CURLOPT_COOKIEFILE => 'parasut.txt'
]);

$result = json_decode(curl_exec($parasut_login), true);

Bir de çerezler konusunda COOKIEFILE ve COOKIEJAR kullanmaya gerek var mı emin değilim?
Ben şimdi interaktif ve defter beyan için oturum açma veri çekme ile ilgili uygulama yapmaya çalışıyorum oturum kapatma aşamasına kadar kullanmıyorum.
Sanırsam curl_close() kullanıldığı zaman gerek duyuluyor.