HTTP connectie met REQUEST

Status
Niet open voor verdere reacties.

mueters

Nieuwe gebruiker
Lid geworden
12 feb 2010
Berichten
3
Hallo allemaal!

Ik ben een beginner in PHP en C++ en heb een klein login script in elkaar geknutselt in PHP, omdat directe mysql verbindingen via c++ nogal onveilig zijn. (hackers...)

Dit PHP script gebruikt het volgende:

PHP:
$varUser = $_REQUEST['user'];
$varUser = mysql_real_escape_string($varUser);

$varPass = $_REQUEST['pass'];
$varPass = mysql_real_escape_string($varPass);

Zoals je ziet pakt hij de username en password van de post/request parameters zal ik het even noemen.

Ik heb ook een paar returns zoals deze:

PHP:
if(mysql_num_rows($login) == 0)
{
	echo "FAILED2";
	exit;
}

Nu wil ik, dat mijn c++ programma verbinding maakt met dit script, de juiste parameters post, en leest wat er ge-echo'd word.

Dus. Als c++ leest dat er "FAILED2" staat, dan moet hij een MessageBox weergeven waarin staat dat de login mislukt is. Ik zou hiervan graag een voorbeeld willen hebben.
De gebruiker mag natuurlijk niks zien van dit hele gebeuren (behalve de messagebox).

Ik hoop dat het een beetje duidelijk is. Ik heb nog helemaal geen ervaring tussen c++ en html/php en ik hoop dat hier een beetje op te krikken. Ik ken de c++ taal, daar hoef je niet bang voor te zijn :)

~ Mueters
 
Je kan een http POST request doen met behulp van sockets.
Hieronder een code-snippet:
[cpp]
string URI;
string httpmessage;
char contentlen[256];
string content;
string user,password;

URI = "/login.php";
user = "uservalue";
password = "passwordvalue";
content = "user=" + user + "&pass=" + password;
sprintf(contentlen, "Content-Length: %d\r\n", content.length());

httpmessage = "POST " + URI + " HTTP/1.0\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n" +
string(contentlen) + "\r\n" + content;

//send met een socket
send(sockfd, httpmessage.c_str(), httpmessage.length(),0);
[/cpp]

Met een library zoals bijv. wininet of libcurl kunnen ook http-requests verstuurd worden.
Dan is de code korter en is minder kennis van http nodig.

EDIT:
Link naar voorbeeld met libcurl.
http://curl.haxx.se/libcurl/c/postit2.html
 
Laatst bewerkt:
Dankjewel. Maar hoe lees ik nu het antwoord terug wat er op de pagina staat I.E "FAILED2"?

Ik had eerst een class die POST en dan het antwoord terugschreef in een CString maar helaas ben ik die verloren :shocked:
 
Als je met sockets werkt kan je met de recv() functie het antwoord inlezen. Dit zal dan een http response zijn.
Je zal dan zelf de gehele response moeten inlezen en parsen.
Werk je met sockets of gebruik je een lib?
 
Ik ben van plan om jouw voorbeeld te gebruiken en eventueel uit te breiden naar wat ik precies wil.

Het moet alleen wel zo veilig mogelijk, het is namelijk voor een login zoals je misschien hebt begrepen ;)

Ik weet wel iets van de communicatie van sockets enzo. Stuurt hij me dan een heel pakket terug?
Spijtig genoeg zit ik niet achter een computer met vc geinstalleerd..
 
Laatst bewerkt:
Over de veiligheid kan ik niet veel zeggen.
De gebruikersnaam en wachtwoord kan je natuurlijk coderen.

recv() werkt een beetje zoals fread()
en geeft het aantal gelezen bytes terug en 0 als de socket
geloten is door de andere kant en kleiner dan 0 bij een fout.

De data komt in een of meer pakketten binnen.
De eerste regels bestaan uit enkele "message-headers". Het einde van de headers is "\r\n\r\n"
Daarna gevolgd door de "message-body" met de inhoud.
In de inhoud zal dan FAILED te vinden zijn.
Als ik goed heb gegoogeld op het PHP echo command
zal FAILED in een stuk "html" staan.
[cpp]// simpel voorbeeld met recv()
char buffer[40960];
int n,ntot;

ntot=0;
while(1)
{
n = recv(sockfd, buffer, sizeof(buffer)-ntot,0);
if(n<=0 || ntot==sizeof(buffer))break;
else ntot += n;
}
if( n<0 )cout << "Er kan niet gelezen worden. fout: " << h_errno << endl;[/cpp]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan