Avatar billede encorez Nybegynder
01. juli 2011 - 11:06 Der er 15 kommentarer og
1 løsning

CURL is samme session

Hej

Jeg bruger CURL til at logge ind på en side, f.eks. "page1". Jeg kunne ikke få det til at virke i starten men det var postfields der manglede i koden.
Så nu kan jeg logge ind på forsiden.
På forsiden er så et link til "page2".

Men hvis jeg så laver en ny CURL på page2 med samme parametre så ryger jeg tilbage til forsiden.

Så jeg mangler nok på en eller anden måde at kunne først logge på page1, og så i samme CURL-session gå videre til page2.

Jeg har googlet, men ikke faldet over den rigtige guide så jeg så lyset.

Nogen der ved hvordan det er man laver det?
Håber det er godt nok beskrevet til at vide hvad jeg mangler :)
Avatar billede erikjacobsen Ekspert
01. juli 2011 - 11:57 #1
Du skal sikkert kigge på cookies, som hedder noget med cookiejar. Der er en beskrivelse her: http://www.electrictoolbox.com/php-curl-cookies/
Avatar billede encorez Nybegynder
01. juli 2011 - 12:13 #2
Takker. Den har jeg fulgt nu og den laver fint en txt fil på min maskine, men skriver ikke noget i den.

Men kan problemet ikke være at for at jeg kan komme på page2, så er det måske ikke en cookie der tjekkes for men en session-variabel, som skulle være sat ved login?

Så det jeg tænker er at jeg måske først skal lave mit CURL til page1 (som virker), og så "bygge" videre på den "session", sådan så den næste CURL ikke bare et en helt ny.

Jeg mener jeg har set et eksempel for længe siden på hvordan man gør det, men kan ikke finde noget lige nu.
Avatar billede erikjacobsen Ekspert
01. juli 2011 - 12:20 #3
sessionsvariabler bliver typisk styret af en cookie
Avatar billede encorez Nybegynder
01. juli 2011 - 12:28 #4
Lige nu gør jeg sådan

$cookie_file_path = "cookies/cookiejar.txt";
$fp = fopen("$cookie_file_path","w") or die("<BR><B>Unable to open cookie file $mycookiefile for write!<BR>");
fclose($fp);

$ch = curl_init("xxx");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "qwer=Login name&uid=$_SESSION[username]&pwd=$_SESSION[password]");
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_SSLVERSION, 2);
    $site_code = curl_exec($ch);

Som sagt hver gang jeg kører den så genere den en cookie-fil på 0 kb. Er der andet jeg mangler for at den skrive den cookie ind i filen?
Avatar billede erikjacobsen Ekspert
01. juli 2011 - 12:59 #5
Jo, det burde være nok. Det kan være et rettighedsproblem til filen, muligvis.

Men kontroller selv om der kommer cookies, ved at tilføje

curl_setopt($ch, CURLOPT_HEADER, 1);

og så printe din $site_code ud.
Avatar billede encorez Nybegynder
01. juli 2011 - 13:17 #6
OK, resultatet er her. Siger den dig noget

HTTP/1.1 200 Document follows Server: HTTP Server/V5R3M0 Accept-Ranges: bytes Transfer-Encoding: chunked Content-Type: text/html;charset=ISO-8859-1 Last-Modified: Fri, 01 Jul 2011 11:15:38 GMT Expires: 0L Content-Language: en-US Set-Cookie: JSESSIONID=0000LpnykohUa7QtaLe6hoS-kp7:C582B5C24E92026C0000082C00000E49099557BD; Path=/ Pragma: no-cache Cache-Control: no-cache Date: Fri, 01 Jul 2011 11:15:38 GMT Server: WebSphere Application Server/6.1

Og den genererede igen en ny txt-fil, efter jeg slettede den gamle, men den tom hvis jeg åbner den.
Avatar billede erikjacobsen Ekspert
01. juli 2011 - 13:36 #7
Du skal kigge efter Set-Cookie: ....noget... og sådan een er der, JSESSIONID. Den bør stå i din cookie fil. Jeg kan ikke lige sige hvad der er galt.

Prøv evt med et eksempel, hvor jeg får en cookie fil med indhold:

<?php

$cookie_file_path = "cookiejar3.txt";

$ch = curl_init("http://www.nytimes.com/");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
    $site_code = curl_exec($ch);
    curl_close($ch);
print $site_code;
?>
Avatar billede erikjacobsen Ekspert
01. juli 2011 - 13:37 #8
Dvs bare linket

  h t t p: / / www.nytimes.com/

fjern selv mellemrum
Avatar billede encorez Nybegynder
01. juli 2011 - 13:51 #9
Med dit eksempel, nøjagtig som dit, henter den fint nytimes, men den skriver desværre ikke noget i filen.

Er der noget jeg skal tjekke i PHP-ini eller andet steds for at den har tilladelse til at skrive på min disk?

Dumt spørgsmål. Den kode du skriver, opretter den også filen hos dig, eller skal du selv oprette filen?
Avatar billede erikjacobsen Ekspert
01. juli 2011 - 13:53 #10
Den opretter også filen. Så er mit bud noget med skriverettigheder. Hvad kører du dit PHP på?
Avatar billede encorez Nybegynder
01. juli 2011 - 14:03 #11
Jeg har installeret WAMP-server hvis du kender det. Og det kører bare på min bærbar. Siger det noget?
Avatar billede encorez Nybegynder
01. juli 2011 - 14:06 #12
Denne kode som jeg kørte med før, kunne jo fint genere selve filen for øvrigt??

$fp = fopen("$cookie_file_path","w") or die("<BR><B>Unable to open cookie file $mycookiefile for write!<BR>");
fclose($fp);
Avatar billede erikjacobsen Ekspert
01. juli 2011 - 14:10 #13
Hmm, ja, den kunne jo oprette filen. Jeg ved ikke rigtig noget om rettigheder under Windows. Det indhold jeg får fra nytimes.com er dette, og det burde du også få ... :

# Netscape HTTP Cookie File
# http://curlm.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.

.nytimes.com    TRUE    /    FALSE    1341056108    RMID    272cf6386cc04e0db0ecd497
.nytimes.com    TRUE    /    FALSE    0    adxcs    s*2550a=0:1|s*2554e=0:1|s*20023=0:1|s*25056=0:1
Avatar billede encorez Nybegynder
01. juli 2011 - 14:35 #14
Nu har jeg fundet den :)

Den har vist genereret filen hele tiden, men et helt andet sted end hvor mine andre www-filer ligger, og hvor jeg forventede den ville blive oprettet.
Den blev oprettet under en apache mappe.

Så efter jeg specificere hvor på drevet den skal ligge fra roden af, så ligger den filen det rigtige sted.

Så arbejder jeg videre med det :)
Avatar billede encorez Nybegynder
01. juli 2011 - 14:41 #15
Yes, det virker :)

Nu kan jeg komme videre til page2.

Tusind tak for hjælpen :)

(ved jo du ikke vil have point, så lukker spørgsmålet. Håber det er ok)
Avatar billede erikjacobsen Ekspert
01. juli 2011 - 15:10 #16
Ja, det er ok.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester