Nasıl gibi / Flash LoadVars bir POST isteği aksine PHP cURL bir POST isteği nedir?

3 Cevap php

Tümü,

Üzgünüz - bu muhtemelen çok garip bir sorudur.

Ben Flash DEA ​​üzerinde çalışıyorum. Öyle şeylerden biri bazı verileri almak için bir ASP sayfası (ki başka bir alanda bulunan) çağırmak.

Ancak, bu ASP sayfa log-in bu siteye o ASP sayfayı çağırmak için izin verilmeden önce, kullanıcılar gerektirir.

Yani, bu Flaş app işe almak benim ilk denemem giriş sayfasına giriş değişkenleri göndermek için loadVars.sendAndLoad () kullanımı idi. Bu benim "açmış" statüsünü tanımlama / oturum değişkenleri ayarlar. Flaş uygulama ihtiyacı verilerini istemek için ASP sayfasını çağırdığında Sonra, sonra, her şey çalışıyor. Flaş app sonra ASP sayfasını çağırdığında, ASP sayfa hala giriş ediyorum inanıyor, böylece başka bir deyişle, ilk sayfa loadVars.sendAndLoad çağrı beni günlükleri, ve log-in durumu (her nasılsa) korunur Lütfen

Şimdi Flash uygulaması dışındaki tüm etrafında ince bir çözüm, başka bir etki konuşlandırılmış olacak. Diğer bir deyişle, ASP sayfası (ve giriş sayfası) domainA.com vardır, ama Flash uygulama domainB.com olacak. Ve Flash uygulamalar farklı etki (I crossdomain ilke dosyaları hakkında biliyorum, ama çeşitli nedenlerle için bu bir seçenek değil) URL'leri arayamazsın.

Yani, benim bir sonraki düşünce bu oldu - oturum açma sayfasına giriş değişkenleri geçmek için cURL kullanır domainB.com bir PHP sayfası kurmak. ASP sayfasını çağırmak için cURL kullanır domainB.com başka bir PHP sayfasını ayarlayın.

Sonra, "vekiller" olarak hareket edecek olan PHP sayfaları aramak için benim Flaş app ayarlayabilirsiniz.

Ancak, bu işe yaramazsa. Ben (domainA.com üzerinde giriş sayfasına değişkenleri geçer) İlk PHP sayfasını çağırdığınızda, ben çalıştığını düşünüyorum. Sonra ikinci PHP sayfası ararsanız ben içeri giriş değilim sanki Ancak, domainA.com üzerinde ASP sayfası, isteği reddeder

Ben Flash dışında her şeyi çalıştırdığınızda, diğer bir deyişle, - "giriş-in" durumu ilk istek sonraki istekleri korunur gibi görünüyor. Ben her şeyi çalıştırmak Ancak, PHP sayfaları, devlet günlüğe kaydedilen korunmaz.

İlk PHP sayfası sisteme beni oturum görünüyor. Ama ikinci PHP sayfası oturum olması ile alacak değil

Bu farkı açıklamak istiyorum kurabiye Flash ve PHP farklı ele nasıl herhangi bir fikir?

Ben herhangi bir tavsiye veya rehberlik dayalı, çok daha fazla ayrıntı sağlamak için mutluyum.

Şimdiden çok teşekkürler!

---- EDIT ----

Müthiş geri bildirim ve önerilere dayalı olarak, ben bu işe aldım. Ben onu parlatmak için bir şans vardı değil; bu cURL seçeneklerden bazıları gereksiz ya da gereksiz olabilir. Ama en azından, o çalışır. İşte kod:

<?php

    $ckfile = tempnam (".", "CURLCOOKIE");

    $url_1 = 'https://somedomain.com/loginService';
    $url_2 = 'https://somedomain.com/getMyData.asp';

    $fields_1 = array(
    	'field1'=>"blah",
    	'field2'=>"blah",
    	'field3'=>"blah",
    );

    $fields_2 = array(
    	'fieldX'=>"blah",
    	'fieldY'=>"blah",
    	'fieldZ'=>"blah",
    );


    $a='';
    $postvars_1 = '';
    foreach($fields_1 as $key=>$value) { 
    	$postvars_1.= $a.urlencode($key).'='.urlencode($value); 
    	$a='&'; 
    }

    $a='';
    $postvars_2 = '';
    foreach($fields_2 as $key=>$value) { 
    	$postvars_2.= $a.urlencode($key).'='.urlencode($value); 
    	$a='&'; 
    }

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
    curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id());
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 	
    curl_setopt($ch, CURLOPT_POST, count($fields));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);

    curl_setopt($ch, CURLOPT_URL, $url_1);
    curl_setopt($ch, CURLOPT_POST, count($fields_1));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars_1);
    $result_1 = curl_exec($ch);

    curl_setopt($ch, CURLOPT_URL, $url_2);
    curl_setopt($ch, CURLOPT_POST, count($fields_2));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars_2);
    $result_2 = curl_exec($ch);

    curl_close($ch);

    header("Content-type: text/xml");
    print $result_2;

    unlink($ckfile);

?>

Söylemeye gerek yok, bunu gerçekleştirmek için çok daha iyi yollar, ya da benim koduyla bazı ciddi sorunlar olabilir. Ama çalışma, şimdi, hiç yoktan iyidir. Ben toplumun yardımı olmadan çalışmak için bu kazanılmış ve aşağıda insanlar var asla. Çok, çok teşekkürler!

3 Cevap

Eğer sorun komut yapıştırın miyim?

İlk bakışta ben cookie (ikinci isteği için kıvrılma yanıtı yakaladı ve düzelene geçti) ikinci komut üzerine yakalanan ve geçirilen olduğunu denetlemek, kıvırmak otomatik tanımlama bilgilerini işlemek (i sanmıyorum), sen yok (çerez içeren) yanıt başlığını kaydederek, web tarayıcısı düşeni.

Sana senaryo gibi bakmak gerektiğini düşünüyorum:

<?php

    // first request

    $url = 'https://somedomain.com/login/';

    $fields = array(
        'field1'=>"aaaaa",
        'field2'=>"bbbbb",
        'field3'=>"ccccc"
    );

    $postvars = array();
    foreach($fields as $key=>$value) { 
        $postvars[] = urlencode($key).'='.urlencode($value); 
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, count($fields));
    curl_setopt($ch, CURLOPT_POSTFIELDS, implode('&',$postvars));
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
    preg_match('/^Set-Cookie: (.*?);/m', $result, $auth_value);
    curl_close($ch);

    // second request

    $url = 'https://somedomain.com/getMyData.asp';
    $fields = array(
        'fieldX'=>"xxxx",
        'fieldY'=>"yyyy",
        'fieldZ'=>"zzzz"
    );

    $postvars = array();
    foreach($fields as $key=>$value) { 
        $postvars[] = urlencode($key).'='.urlencode($value); 
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, count($fields));
    curl_setopt($ch, CURLOPT_POSTFIELDS, implode('&',$postvars));
    curl_setopt($ch, CURLOPT_COOKIE, 'authenticate='.urlencode($auth_value[1]));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
    curl_close($ch);

    print $result;


?>

Bu geri ilk istek olarak geliyor başlık davranma sakıncası olduğunu varsayarsak edilmektedir.

İyi şanslar

PHP otomatik sihirli flaş yok gibi sizin için çerezleri işlemez. Sen mesajı, içeri çerezleri şeyler için dosyanın yolu da dahil olmak üzere seçenekleri bir çanta yapar işlevine geçmelidir

Seçenekleri bu çanta yapmak için nasıl bir açıklaması burada bulunabilir: http://usphp.com/manual/en/http.request.options.php

Giriş durumunun büyük olasılıkla çerezleri kullanarak korunur. PHP ile proxy, bu istekler arasında çerezleri saklamak için gitmiyor. Bu geçici bir çözüm bulmak için barok yolları (belki geri Flash tanımlama geçebileceği) olsa da, bu bir ölçeklenebilir veya kalıcı bir çözüm gibi gelmiyor. Bir çapraz etki alanı ilkesi veya Flash doğrudan (JSON geri arama gibi) için size giriş yapıyorsanız site temas sahip başka bir yol kullanmak için bir yolu var mı?