Avatar billede mrfunder Nybegynder
29. december 2005 - 20:02 Der er 14 kommentarer og
1 løsning

Login på anden server

Hej Eksperter!
Jeg er så småt gået igang med C++. Jeg er ikke den helt store nørd, der er mange ting jeg ikke kan finde ud af - så jeg vil lige smide et spørgsmål på bordet.

Min opgave består i at kontakte en web-adresse, og få min applikation til at logge ind (skabe en session ved login). (eksempel = http://www.vup.dk/?p=3) På den givne side er der nogle input felter; "email,kodeord". Min opgave ligger så i at få en c++ applikation til at logge ind med givne variabler, som udfyldes inden man connecter. Efter man er logget ind, skal min applikation så arbejde videre men en række forskellige ting.

Alle disse ting kan gøres via browseren, men jeg vil gerne have en fil jeg kan køre der så gør de valgte ting for mig.

// server-connection
#include <iostream>
using namespace std;

int main () {
//Valgte login-informationer
email = jesper@jespersen.dk;
kode = 123456;

return 0;
}

Jeg er ikke helt klar over, om c++ er det rigtige sprog for denne opgave. Finder i mit spørgsmål rodet, så smid endelig en post - jeg har haft lidt problemer med at formulere dette..
Avatar billede mrfunder Nybegynder
29. december 2005 - 20:16 #1
Forklaret på en anden måde:
Jeg mangler en måde at afvikle funktioner som andre har skrevet over nettet.

Når jeg logger ind på det givne site skabes en session på serveren. Når denne session er skabt, giver det mig adgang til diverse undersider på serveren. Mit mål er at få skabt denne session, og så køre en underside som opdatere min profil. (Denne profil-opdaterins side, kan kun køres når en session er skabt)

Kan det lade sig gøre at lave dette i c++?
Det skal være et mindre program som man har kørende på ens computer, som så gentages i baggrunden af andre ting engang hver 24. time (bestemt angivet klokkeslæt hver dag)
.. Jeg er meget i tvivl om en applikation kan skabe sessions på en server, som normalt skabes via en browser
Avatar billede arne_v Ekspert
29. december 2005 - 20:24 #2
du kan godt kalde en web side fra C++ (Internet Explorer er formentligt skrevet
i C++) men helt nemt er det ikke

jeg har noget kode som poster en form men den håndterer ikke cookies (som du
formentligt skal bruge for at holde sessionen)

min koden bruger rå sockets, men jeg mener at Bertel har noget kode som bruger
wininet, hvis det håndterer cookies, så er det bedre

Java eller .NET var nok noget nemmere end C++ til den slags
Avatar billede mrfunder Nybegynder
29. december 2005 - 20:31 #3
Desværre er jeg mere eller mindre helt tom, når vi snakker om Java, .NET programmering
Avatar billede mrfunder Nybegynder
29. december 2005 - 20:31 #4
Er der virkelig ikke andre måder det kan lade sig gøre på?
Avatar billede arne_v Ekspert
29. december 2005 - 20:35 #5
Vent lige og se om ikke Bertel kigger forbi ellers så må jeg
poste min socket kode,
Avatar billede bertelbrander Novice
29. december 2005 - 21:07 #6
Kode der henter en side:

#include <windows.h>
#include <wininet.h>
#include <iostream>

int main()
{
  HINTERNET Internet = InternetOpen("My Url Browser", INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0);
  if(!Internet)
  {
      std::cout << "Failed to open internet: " << GetLastError() << std::endl;
      return 1;
  }

  HINTERNET Url = InternetOpenUrl(Internet, "http://www.google.com/", 0, 0, INTERNET_FLAG_RAW_DATA, 0);
  if(!Url)
  {
      std::cout << "Failed to open Url: " << GetLastError() << std::endl;
      return 2;
  }

  char Buffer[64*1024];

  DWORD ReadLen = 0, CurrentPos = 0;
  do
  {
      InternetReadFile(Url, (void *)(Buffer + CurrentPos), sizeof(Buffer) - CurrentPos, &ReadLen);
      CurrentPos += ReadLen;
  }
  while(ReadLen);
  Buffer[CurrentPos] = 0;
  std::cout << Buffer << std::endl;
  InternetCloseHandle(Url);
  InternetCloseHandle(Internet);
}

Jeg er ikke sikker på hvordan man laver sessions, cookies eller indtaster værdier i felter.
Avatar billede mrfunder Nybegynder
30. december 2005 - 23:32 #7
Er det muligt at jeg kan lave dette i PHP, og så køre min PHP'kode igennem en applikation eller noget? (sådan det køres som et lille program på computeren)
Avatar billede arne_v Ekspert
30. december 2005 - 23:49 #8
ja

hvis PHP kan emulerer en login og hente side

så kan du godt køre PHP fra dit C++ program grabbe output
Avatar billede mrfunder Nybegynder
31. december 2005 - 15:01 #9
Endelig noget respons der er positivt i mine ører!

Kan jeg få noget mere info om hvordan, jeg skal køre mit PHP script, som en c++ applikation?
Avatar billede arne_v Ekspert
31. december 2005 - 15:47 #10
ikke "som" men "fra"

test.php:

<?php
$i = 123;
print "i=$i\n";
?>

test.c:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  char *cmd = "php test.php";
  char buf[1000];
  FILE *ptr;
  if ((ptr = popen(cmd, "r")) != NULL)
  {
      while (fgets(buf, sizeof(buf), ptr) != NULL)
      {
            printf("%s", buf);
      }
      pclose(ptr);
  }
  return 0;
}

byg og kør:

C:\>gcc test.c -o test.exe

C:\>test
i=123
Avatar billede arne_v Ekspert
31. december 2005 - 15:47 #11
det krævet at man har sat tingene rigtigt op
Avatar billede mrfunder Nybegynder
31. december 2005 - 17:56 #12
test.c:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  char *cmd = "test.php";
  char buf[1000];
  FILE *ptr;
  if ((ptr = popen(cmd, "r")) != NULL)
  {
      while (fgets(buf, sizeof(buf), ptr) != NULL)
      {
            printf("%s", buf);
      }
      pclose(ptr);
  }
  return 0;
}




test.php:

<?php
$i = 123;
print "i=$i\n";
?>


Når jeg kører min applikation nu, åbner den selve PHP dokumentet. Det er mine php-print beskeder jeg gerne vil have som output (printes) inde i min applikation.

Er det mig der har lavet en fejl?

Godt nytår forresten! :)
Avatar billede arne_v Ekspert
01. januar 2006 - 11:02 #13
char *cmd = "php test.php";

og

char *cmd = "test.php";

er jo ikke det samme

du skal have det sat op så du kan kalde PHP.EXE

det gør jeg ved at have C:\php-4.3.10-Win32\cli og C:\php-4.3.10-Win32 i PATH
Avatar billede mrfunder Nybegynder
02. januar 2006 - 20:48 #14
Det skulle vist være tid til at lukke og slukke. Smid et svar Arne v
Avatar billede arne_v Ekspert
03. januar 2006 - 17:18 #15
OK

fik du noget til at virke ?
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
Kurser inden for grundlæggende programmering

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