Nasıl bir CURL yönlendirme çerezleri geçmek?

4 Cevap php

Aşağıdaki senaryoyu düşünün: Ben bir CURL bağlantıyı açmak ve POST aracılığıyla bazı XML-Logindata geçmektedir. Sunucu oturum çerezleri ayarlamak ve aşağıdaki "karşılama"-sayfa beni yönlendirir olan bir 302 yönlendirme ile cevaplar. Ben kaybolmak yönlendirme-sayfadaki set FOLLOWLOCATION çerezleri etkinleştirmeniz ve hoş sayfalık bir "oturum doldu"-iletisiyle başarısız olursa. Ben FOLLOWLOCATION devre dışı bırakırsanız, ben (tabii ki) yönlendirildi ve karşılama-sayfa beni giden bir link ile "sayfa başka bir yere taşındı" ile bir HTML sayfası olsun değilim. Çerezleri ayarlanır gibi çalışır, ama ben yönlendirmeyi takip ve karşılama-sayfasına gitmek gerekir.

Onlar doğru ayarlayın böylece Peki, ben kurabiye korumak?

Bu şimdiye kadar benim kodudur:

$ch = curl_init('https://www.example.com/login');

curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, '<some xml data>');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml; charset=UTF-8"));

curl_exec($ch);
curl_close($ch)

Thanks for any help! ;

4 Cevap

This is an old question, but I had the same problem, so google took me here. Finally, I managed to solve it. By passing an empty string "" to set CURLOPT_COOKIEFILE using curl_setopt will solve the problem:

curl_setopt($ch, CURLOPT_COOKIEFILE, "");

Bölüm CURLOPT_COOKIEFILE http://curl.haxx.se/libcurl/c/curl_easy_setopt.html See

iki seçeneğiniz ayarlamanız gerekir çerezleri kullanmak için curl oturumunda php talimat:

curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');// set where cookies will be stored
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');// from where it will get cookies

yani her çerez CURLOPT_COOKIEJAR üzerine eklenecek ve bu çerez CURLOPT_COOKIEFILE ayarlayarak her yere yapılacak

Kendimi cevaplamak için, bu ben yaptım nasıl:

Header-http-durum kodu alın. Bu yönlendirme buysa yeni konumu ayıklamak ve elle yönlendirme. Aksi başlığı ve çıkış içeriği kaldırın:

$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

if($info['http_code'] == 301 || $info['http_code'] == 302) { // redirect manually, cookies must be set, which curl does not itself

    // extract new location
    preg_match_all('|Location: (.*)\n|U', $response, $results);
    $location = implode(';', $results[1]);

    // redirect manually
    header("Location: $location");
    exit;

} else { // no redirect, remove header and output directly

    $response = substr_replace($response, '', 0, strpos($response, '<', 0));

    echo $response;

}

Siz de bu kütüphaneyi kontrol etmek isteyebilirsiniz: http://github.com/shuber/curl