[WinSocks] Daten an php-Script übermitteln



  • Hi,
    ich habe momentan das Problem, dass ich mit einem Programm, Daten an ein php-Script übermitteln muss. Das ganze möchte ich mit Sockets lösen. Ich habe bereits herausgefunden, dass man soetwas mit http-posts löst. Nur habe ich keine Ahnung wie ich das realisieren soll und an dieser Stelle würde ich mich über eure Hilfe freuen.

    Danke

    Nur_zu_Besuch



  • - Verbindung aufbauen
    - Daten senden/empfangen
    - Verbindung schließen



  • Ja danke doch soweit war ich auch schon.

    -wie spreche ich das php-script an und nicht einfach nur den server
    -kann ich die daten einfach mit send übermitteln oder brauche ich eine extra funktion

    danke





  • Danke Meep Meep

    Nun habe ich eine letzte frage, wie muss ein post request aufgebaut sein, dass ich an die index.php einen string senden kann?

    ich habe hier ein kleines beispiel gemacht um es besser zu veranschaulichen.

    <?php
    $daten=$_POST["daten"];
    echo $daten;
    ?>
    

    danke



  • http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol

    mittig

    die daten werden hinten anghängt.



  • #include "windows.h"
    
    #pragma comment (lib, "ws2_32")
    
    int WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
    {
    
    	WSADATA wsa;
    	if(WSAStartup(MAKEWORD(2,0), &wsa) != 0)
    	{
    		MessageBoxA(0,"Winsocks konnte nicht gestartet werden","Fehler",MB_ICONERROR);	
    	}
    
    	hostent* phe = gethostbyname("www.******.**.funpic.de");
    
    	SOCKET Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    
    	sockaddr_in service;
    	service.sin_family = AF_INET;
    	service.sin_port = htons(80); 
    
    	char** p = phe->h_addr_list;
    	int result;
    	do
    	{
    		service.sin_addr.s_addr = *reinterpret_cast<unsigned long*>(*p);
    		++p;
    		result = connect(Socket, reinterpret_cast<sockaddr*>(&service), sizeof(service));
    	}
    	while(result == -1);
    
    	MessageBoxA(0,"Erfolgreich verbunden","Info",MB_ICONINFORMATION);
    
    	char *Buffer =  "POST /index.php HTTP/1.1"
    					"Host: ******.**.funpic.de"
    				    "Content-Type: application/x-www-form-urlencoded"
    					"Content-Length: 24"
    					"daten=Unthinking_Majority";
    
    	send(Socket,Buffer,lstrlenA(Buffer),0);
    
    	return 0;
    }
    

    Hier ist mein Source, ich komme nicht ganz damit zurecht, zumindest erstellt mir mein php-script keine logfile.
    würde mich freuen wenn sich das mal jemand anschauen würde.

    Grüße



  • kurz drübergeschaut: schau dir das rfc dazu an

    es fehlen die \r\n

    auf wikipedia sieht es so aus:

    POST /wiki/Spezial:Search HTTP/1.1
    Host: de.wikipedia.org
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 24

    search=Katzen&go=Artikel

    du musst das genauso machen.

    also:

    POST /wiki/Spezial:Search HTTP/1.1\r\nHost: de.wikipedia.org\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: 24\r\n\r\nsearch=Katzen&go=Artikel

    beachte den doppelten zeilenumbruch vor den daten. der ist zwingend!!!

    deine content-length ist unsinn.

    mach irgendwas mit Content-length: ". strlen(deineparameterlänge) ."\r\n ....

    oder length, je nach c oder c++.
    oder rechne zum testen richtig.

    erstmal über den unteren teil geschaut.

    ps: noch zwei beispiele zum verstandnis...

    werden die Daten hier, durch eine Leerzeile getrennt, an den Header angehangen.

    aus:
    http://www.html-world.de/program/http_3.php

    und

    $packet ="POST ".$p."index.php?action=login2 HTTP/1.0\r\n";
    $packet.="Host: ".$host."\r\n";
    $packet.="Accept-Language: en\r\n";
    $packet.="Accept-Encoding: text/plain\r\n";
    $packet.="User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n";
    $packet.="Cache-Control: no-cache\r\n";
    $packet.="Content-Type: application/x-www-form-urlencoded\r\n";
    $packet.="Content-Length: ".strlen($data)."\r\n";
    $packet.="Connection: Close\r\n\r\n";
    $packet.=$data;
    sendpacketii($packet);
    

    aus
    http://retrogod.altervista.org/smf_11rc2_lock.html

    beispiele einfach nur eben ergooglet... gibt viele mehr.



  • Dankeschön elise, das hat mir sehr weitergeholfen.
    Mittlerweile kommt zumindest etwas bei der index.php an, nur das mit den daten klappt noch nicht so ganz, aber das bekomme ich auch noch in den griff.

    danke


Anmelden zum Antworten