logo Homepage
+  NewbieContest
|-+  Challenges» Aide Programmation» Modification SMF
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: Modification SMF  (Lu 31036 fois)
zours

Profil challenge

Classement : 552/54254

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 811


Voir le profil
« le: 03 Octobre 2007 à 09:57:56 »

Comme certains l'ont remarqué, depuis le passage à SMF (v4), les épreuves de programmation ont pu changer un peu pour certains. Tout dépend en fait de comment vous les faisiez auparavant.

Si vous les faisiez proprement, c'est à dire en envoyant le cookie, ça change en fait assez peu. Le nom du cookie n'est plus le même, mais c'est trivial. En revanche, si vous recherchiez la solution de facilité, et passiez le PHPSESSID en GET dans l'URL, bah raté, ça marche plus.

SMF exige en effet que le cookie reste un cookie, et s'en tamponne joyeusement si vous le passez en GET. C'est tout à fait normal, simple question de sécurité.

Bref, malgré la simplicité de l'utilisation des cookies, afin de mettre tous les membres sur un pied d'égalité, voilà quelques pistes sur la manière d'envoyer des cookies.

D'abord un petit exemple en PHP :

Code:
$context = stream_context_create(array("http" => array ("header" => "Cookie: nomcookie=valeurcookie\r\n"))) ;
echo file_get_contents("http://www.newbiecontest.org/epreuves/prog/prog1.php", false, $context) ;

L'idée est qu'au lieu d'appeler directement la fonction, on lui créé un contexte d'exécution en lui filant un cookie. C'est l'affaire d'une seule ligne, qu'on vienne pas me dire que c'est compliqué, quand même .

Encore un autre exemple. Là c'est aussi du PHP, parce que c'est ce que j'avais sous la main, mais c'est un exemple d'utilisation avec la lib curl. Ce truc fonctionne partout et a des bindings pour tellement de langages que ça devient dur de trouver quelque chose avec quoi il ne s'interface pas, c'est donc une solution extrêmement facile à porter d'un langage à un autre. Les noms exacts peuvent peut-être changer, mais le fonctionnement reste le même.

Code:
$c = curl_init("http://www.newbiecontest.org/epreuves/prog/prog1.php") ;
curl_setopt($c, CURLOPT_COOKIE, "cookie=value") ;
echo curl_exec ($c) ;
curl_close($c) ;

Là encore c'est plutôt simple.

Très souvent, si vous utilisez une librairie de transaction HTTP toute prête, vous aurez des fonctions qui vous permettent de trafiquer les POST et les cookies (parfois même les GET, mais l'intérêt est moins évident vu que c'est aussi simple de les mettre directement dans l'URL).

Enfin, si vous envoyez vos requêtes à la main, ça reste quand même facile . Vous rajouterez dans vos en-têtes HTTP une ligne de ce type :

Code:
Cookie: name=value\r\n

Voilà. Avec ça, tout le monde devrait avoir assez de pistes.
Journalisée
said0011
Profil challenge

Classement : 2773/54254

Néophyte
*
Hors ligne Hors ligne
Messages: 26


Voir le profil
« #1 le: 03 Octobre 2007 à 11:31:25 »

  J'ai essayer chez moi ça ne marche pas :S

Quand je vérifie avec Livehttp alors il y a pas de value cookie
Journalisée
Zmx

Profil challenge

Classement : 69/54254

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 559


Voir le profil WWW
« #2 le: 03 Octobre 2007 à 11:48:56 »

En perl avec LWP
Code:
#!/usr/bin/perl
  # Create a user agent object
  use LWP::UserAgent;
  $ua = LWP::UserAgent->new;
  $ua->agent("MyApp/0.1 ");
  $h = HTTP::Headers->new;

  $h->header('Cookie' => 'MonCookie=MaValeur;SecondCookie=myVal2');

  # Create a request
  my $req = HTTP::Request->new(GET => 'http://www.techniques-ingenieur.fr/test.asp',$h);

  # Pass request to the user agent and get a response back
  my $res = $ua->request($req);


  # Check the outcome of the response
  if ($res->is_success) {
        print $res->content;
  }

Journalisée

CommComm

Profil challenge

Classement : 85/54254

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1283


Voir le profil
« #3 le: 03 Octobre 2007 à 12:06:43 »

Bon... stop, non ?
On ne va pas tout décliner comme méthodes, outil et langages.
En plus si on fournit l'aide pour les cookies, demain on va s'étonner qu'on ne fournisse pas d'aides pour de l'ocr, des grands nombres, IRC et tout le reste.
Journalisée

En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(Devise d'un newbie shadok)
zours

Profil challenge

Classement : 552/54254

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 811


Voir le profil
« #4 le: 03 Octobre 2007 à 12:23:00 »

Oui stop. J'avais bêtement oublié de locker le topic, j'avais pas imaginé que le défilé de mendiants commencerait même pas deux heures après.

Alors c'est bon, ça fait déjà beaucoup d'aide (beaucoup trop à mon avis, même), on s'arrête là.
Journalisée
Pages: [1]
  Imprimer  
 
Aller à: