[C++]Http Post-request

ötgünz

Grünschnabel
Hallo,
Ich versuche seid einiger Zeit einen Http Post-request hinzubekommen.

Editor: Microsoft Visual C++ 2010 Express

Mein Code(Ab Zeile 169):
Code:
			 String ^domainurl = "www.XXX.de/";
			 String ^scripturl = "forum/index.php?form=UserLogin";
			 String ^stringtosend = "loginUsername=TestAccount&loginPassword=XXXXXXX&url=%2Fforum%2Findex.php&useCookies=1";

			 HINTERNET inet = InternetOpen("XXXX v0.3", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
         HINTERNET connection;
         HINTERNET request;
         unsigned long flags;
         unsigned long len;
         connection = InternetConnect(inet, TEXT(domainurl), INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
         flags = INTERNET_FLAG_PRAGMA_NOCACHE;
         request = HttpOpenRequest(connection, "POST", TEXT(scripturl), NULL, NULL, NULL, flags, 1);
         HttpSendRequest(request, "Content-Type: application/x-www-form-urlencoded", 47, (void*)stringtosend, strlen(stringtosend));
         std::stringstream CompleteBuffer;
         do{
             char antwortbuffer[10000];
             InternetReadFile(request, antwortbuffer, sizeof antwortbuffer, &len);
             antwortbuffer[len] = '\0';
             CompleteBuffer << antwortbuffer;
           } while(len);
         InternetCloseHandle(request);
         InternetCloseHandle(connection);
         InternetCloseHandle(inet);
 
MessageBox::Show(NULL,CompleteBuffer.str().c_str(),"Server Antwort",MB_OK);

Es soll sich in einem Woltlab Forum einloggen...

Bekomme aber beim Debuggen diese Fehler:

Code:
>------ Erstellen gestartet: Projekt: X1X, Konfiguration: Debug Win32 ------
1>  X1X.cpp
1>xxxxxx\Form1.h(173): error C2664: 'InternetOpenW': Konvertierung des Parameters 1 von 'const char [15]' in 'LPCWSTR' nicht möglich
1>          Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>xxxxxx\Form1.h(178): error C2065: 'Ldomainurl': nichtdeklarierter Bezeichner
1>xxxxxx\Form1.h(180): error C2065: 'Lscripturl': nichtdeklarierter Bezeichner
1>xxxxxx\Form1.h(181): error C2440: 'Typumwandlung': 'System::String ^' kann nicht in 'void *' konvertiert werden
1>          Ein verwalteter Typ kann nicht in einen nicht verwalteten Typ umgewandelt werden
1>xxxxxx\Form1.h(181): error C2664: 'strlen': Konvertierung des Parameters 1 von 'System::String ^' in 'const char *' nicht möglich
1>          Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
1>          Ein verwalteter Typ kann nicht in einen nicht verwalteten Typ umgewandelt werden
1>xxxxxx\Form1.h(181): error C2664: 'HttpSendRequestW': Konvertierung des Parameters 2 von 'const char [48]' in 'LPCWSTR' nicht möglich
1>          Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>xxxxxx\Form1.h(182): error C2079: 'CompleteBuffer' verwendet undefiniertes class 'std::basic_stringstream<_Elem,_Traits,_Alloc>'
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>,
1>              _Alloc=std::allocator<char>
1>          ]
1>xxxxxx\Form1.h(187): error C2297: '<<': Ungültig, da der rechte Operand vom Typ 'char [10000]' ist
1>xxxxxx\Form1.h(187): warning C4552: '<<': Operator hat keine Auswirkungen; Operator mit Nebeneffekt erwartet
1>xxxxxx\Form1.h(193): error C2039: 'str': Ist kein Element von 'System::Int32'
1>          c:\program files\reference assemblies\microsoft\framework\.netframework\v4.0\mscorlib.dll: Siehe Deklaration von 'System::Int32'
1>xxxxxx\Form1.h(193): error C2228: Links von ".c_str" muss sich eine Klasse/Struktur/Union befinden.
1>xxxxxx\Form1.h(193): error C2665: "System::Windows::Forms::MessageBox::Show": Durch keine der 21 Überladungen konnten alle Argumenttypen konvertiert werden.
1>          c:\program files\reference assemblies\microsoft\framework\.netframework\v4.0\system.windows.forms.dll: kann 'System::Windows::Forms::DialogResult System::Windows::Forms::MessageBox::Show(System::String ^,System::String ^,System::Windows::Forms::MessageBoxButtons,System::Windows::Forms::MessageBoxIcon)' sein
1>          c:\program files\reference assemblies\microsoft\framework\.netframework\v4.0\system.windows.forms.dll: oder "System::Windows::Forms::DialogResult System::Windows::Forms::MessageBox::Show(System::Windows::Forms::IWin32Window ^,System::String ^,System::String ^,System::Windows::Forms::MessageBoxButtons)"
1>          bei Anpassung der Argumentliste '(int)'
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

Meine Includes:
Code:
#pragma once
#include "stdafx.h"
#include "Form2.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <WinInet.h>

Wäre super wenn mir jemand weiterhelfen könnte.

lg ötgünz
 
Hi und Willkommen bei tutorials.de :)

Ich hab mir nicht jeden Fehler ins Detail angeschaut (das sind übrigens Compilerfehler, der Debugger ist was anderes), aber das Hauptproblem hier ist, dass du zwei Sprachen (bzw. .NET und nativ) mischt.

Warum?
Entweder bleib nur nativ (und vergiss String^) oder verwende die .NET-Klassen für HTTP.

Gruß
 
Kannst du ein anderes Codestück zeigen, damit man erkennen kann, ob du allgemein nativ oder .NET programmierst?
 
Zuletzt bearbeitet:
Gerne doch

Ich hoffe das reich

Code:
 try {
				 String ^emp = L"";
				 if(textBox1->Text->Equals(emp)) {
					 throw 1;
				 }
				 else if(textBox2->Text->Equals(emp)) {
					 throw 2;
			     }
             }
			 catch(int err) {
				 String ^errmsg = gcnew String(L"");
				 if(err == 1) {
                     errmsg += L"Du hast keinen Usernamen eingegeben!!";
                 }
				 else if(err == 2) {
                     errmsg += L"Du hast kein Passwort eingegeben!!";
			     }
				 MessageBox::Show(errmsg,L"Error",MessageBoxButtons::OK,MessageBoxIcon::Error);
				 return;
             }
 
Zurück