Zum Inhalt springen

Proxy-Server


wulfgang

Empfohlene Beiträge

  • Antworten 65
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Hallo,

also ich habe dort INTERNET_OPTION_PROXY_PASSWORD und INTERNET_OPTION_PROXY_USERNAME gefunden.

Da ist leider kein Beispiel.

Ich würde das irgendwie so machen:

SetOption->session( INTERNET_OPTION_PROXY_PASSWORD::"meinPasswort" INTERNET_OPTION_PROXY_USERNAME::"meinUser", DWORD dwValue,

   DWORD dwFlags = 0 

);

Was muss noch verbessern? Mit der Beschreibung zum dwValue kann ich noch nicht so viel anfangen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja eigentlich schon. Bei einer Funktionsdeklaration werden die Parameter und Datentypen festgelegt. Bei einem Funktionsaufruf werden Parameter übergeben. Ist doch so richtig?

Jetzt müsste das einem Funktionsaufruf näher kommen.

SetOption->session( INTERNET_OPTION_PROXY_PASSWORD::"meinPasswort" INTERNET_OPTION_PROXY_USERNAME::"meinUser", dwValue,

 dwFlags = 0 

);

Bearbeitet von wulfgang
Link zu diesem Kommentar
Auf anderen Seiten teilen

Guten Morgen,

habe noch mal gesucht und probiert. Das ist herrausgekommen:

 session.SetOption(INTERNET_OPTION_PROXY_PASSWORD ,(DWORD)"meinpasswort");

	 session.SetOption(INTERNET_OPTION_PROXY_USERNAME ,(DWORD)"meinuser");
Der Compiler meckert nicht mehr. Bei Ausführung des Programms erhalte ich aber immer noch die Fehlermeldung:"Der Servername oder die Serveradresse konnten nicht verarbeitet werden." Ich erhalte noch die Warnung: "warning C4002: too many actual parameters for macro '_T' " Diese Warnung betrifft die Zeile:
CInternetSession session(_T("My FTP Session",1, INTERNET_OPEN_TYPE_PROXY , "beispielproxy-ge", NULL, 0));

Kann diese Zeile Ursache für mein Problem sein?

Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Compiler meckert nicht mehr.

Ja, weil du es ihm quasi verboten hast. Der Cast auf DWORD sagt dem Compiler, dass er das so akzeptieren muss. Ich gehe ganz stark davon aus, dass du für String-Options die andere Version von SetOption benutzen musst.

Als allererste Maßnahme wäre es gut, den Rückgabewert von SetOption zu prüfen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin,

also ich habe jetzt geschrieben:

 bool    abc = false;

	 abc = session.SetOption(

    INTERNET_OPTION_PROXY_PASSWORD,

    _T("jutta41"),

    _tcslen(_T("jutta41")) );

	cout << abc << "\n";



	session.SetOption(

    INTERNET_OPTION_PROXY_USERNAME ,

    _T("TSK957"),

    _tcslen(_T("TSK957")) );

Leider bekomme ich als Rückgabe weiterhin eine 0.

Außerdem bekomme ich folgende Warnungen:warning C4267: 'argument' : conversion from 'size_t' to 'DWORD', possible loss of data

und

warning C4800: 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)

Hast du noch eine Idee?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich versuche jetzt erst mal eine normale Ftp-Verbindung herzustellen-ohne Proxy. Damit ich das erst mal hinbekomme.

Ich erhalte trotzdem noch die Meldung das der Servername nicht verarbeitet werden kann. Liegt das irgendwie vielleicht an dem Casting:

pstrServer = (LPCTSTR)servername;

	LPCTSTR login = (LPCTSTR)"user";

    LPCTSTR passwd = (LPCTSTR)"password";
Außerdem erhalte ich noch eine Warnung: warning C4002: too many actual parameters for macro '_T' Mein Code jetzt:
// KlassenMethodenKonsole.cpp : Defines the entry point for the console application.

//


#include "stdafx.h"

#include <iostream>



	/////////////////////////////////////////////////////////

    //Block zum Aufbauen der Verbindung

	/////////////////////////////////////////////////////////



	//Bibliotheken für FTP-Session

	#include <afx.h>

	#include <afxwin.h>

	#include <afxinet.h>

	#include <stdio.h>



	int warte; 


	using namespace std;


	int _tmain(int argc, _TCHAR* argv[])

	{

		if (!AfxWinInit(::GetModuleHandle(NULL), NULL, 

                    ::GetCommandLine(), 0))

    {


        return -1;

    }


	//Objekt session wird erzeugt


	 CInternetSession session(_T("My FTP Session",1, INTERNET_OPEN_TYPE_DIRECT));  


//Zeiger auf CFtpConnection

	CFtpConnection *connection;




	//Deklarationen für GetFtpConnection Member-Funktion

	char servername[100]="beispielserver"; 

	LPCTSTR pstrServer;

	pstrServer = (LPCTSTR)servername;

	LPCTSTR login = (LPCTSTR)"user";

             LPCTSTR passwd = (LPCTSTR)"password";

             INTERNET_PORT port = 21;

             BOOL bPassive = FALSE;



	cout << "Verbinde mit " << servername << " ...\n";


	try

	{


	//FTP-Verbindung wird eröffnet,Methode GetFtpConnection wird auf session angewandt, connection wird auf zurückgegeben Zeiger gesetzt

		if(connection = session.GetFtpConnection(pstrServer, login, passwd, port, bPassive)) 

			{

			cout << "Verbindung wurde aufgebaut";     

			}


	}

	catch (CInternetException* pEx)

    {

		cout<<"FEHLER : "<<GetLastError()<<endl;

        TCHAR sz[1024];

        pEx->GetErrorMessage(sz, 1024);

        printf_s("ERROR!  %S\n", sz);

        pEx->Delete();

     }

	cin >> warte;

	return 0;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

kann mir bitte noch jemand helfen wegen dem Servernamen?
Bitte kein Threadpushing, siehe Boardregeln.

Ist mein Casting zu (LPCTSTR) irgendwie falsch?
Ein Cast bedeutet, dass hier der Programmierer besser weiß, was richtig ist, als der Compiler. Deswegen sollte man Casts auch nur einsetzen, wenn man weiß, was man tut. Keinesfalls sollte man versuchen, mit Cast Compilezeitfehler zu beheben. Das hat nur den Effekt, dass der Compiler dann zwar nicht mehr meckert, man sich dafür aber Laufzeitfehler einhandelt.

Was soll dieser Cast denn bewirken?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin,

laut msdn ist das Casting doch notwendig? Dort wird doch als Datentyp für CInternetSession::GetFtpConnection LPCTSTR vorgegeben. Und dann habe ich halt gecastet:). Wenn ich nicht caste bekomme ich

error C2440: '=' : cannot convert from 'char [100]' to 'LPCTSTR'.
als Fehlermeldung. Deswegen muss ich doch casten, oder nicht?
Link zu diesem Kommentar
Auf anderen Seiten teilen

laut msdn ist das Casting doch notwendig? Dort wird doch als Datentyp für CInternetSession::GetFtpConnection LPCTSTR vorgegeben. Und dann habe ich halt gecastet:).
Und genau das ist falsch. Casten bewirkt keine magische Typumwandlung. Casten ist rohe Gewalt.

Wenn ich nicht caste bekomme ich als Fehlermeldung. Deswegen muss ich doch casten, oder nicht?
Nein, das habe ich doch im letzten Beitrag erklärt. Mit dem Cast erreichst du nur, dass der Compiler den Mund hält. Der Code bleibt so falsch, wie er war.

Casts braucht man nur sehr selten. Leider gewöhnen sich Anfänger oft an, Compilefehler wegen unpassender Typen durch Casts zu "beheben". Gewöhn dir diesen Reflex "Typfehler -> Casten" bitte ganz schnell wieder ab.

Dein Zeichenkettenliteral ist ein Array von const char. Du brauchst LPCTSTR, das ist ein Zeiger auf const TCHAR. TCHAR ist, abhängig davon, ob du Unicode benutzt oder nicht, entweder char oder wchar_t bzw. WCHAR. In deinem Fall ist Unicode definiert, sonst würde der Compiler keine Fehler ausgeben, wenn du den Code weglässt.

Benutzt das _T-Makro für deine Stringliterale.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Guten Morgen,

also ich habe es jetzt ohne Proxy hinbekommen! Danke für die Hilfe:uli

Mit Proxy kriege ich das leider noch nicht hin.

Irgendwas stimmt noch nicht mit meinem: session.SetOption h. Der Rückgabewert ist 0 und getLastError sagt

ERROR_INTERNET_INCORRECT_HANDLE_TYPE

12018 The type of handle supplied is incorrect for this operation.

bool    abc = false;

	 abc = session.SetOption(

    INTERNET_OPTION_PROXY_PASSWORD,

    _T("meinpassword1"),

    _tcslen(_T("meinpassword1")) );

	cout << abc << "\n";

	cout<<"FEHLER : "<<GetLastError()<<endl;

Habe das ja genauso umgesetzt wie hier im Forum geschrieben. Sieht noch jemand meinen Fehler? Ist das _tcslen dazu da die Länge vom Buffer zu bestimmen?

meinpassword1 muss ja vom Typ lpvoid sein, ist das _T vielleicht falsch?

Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe ein wenig gesucht und dabei mehrere Hinweise auf dasselbe Problem, aber keine definitive Lösung gefunden. Es scheint, als ob du die Proxy-Options über das Connect-Handle setzen musst, nicht über das Session-Handle.

Siehe:

Setting and Retrieving Internet Options (Windows)

Leider habe ich den MFC-Code hier gerade nicht zur Hand, daher kann ich nicht nachsehen, wie das genau in CInternetSession gekapselt ist.

Ich könnte mir aber vorstellen, dass das mit MFC möglicherweise gar nicht geht, du also die "rohe" WinAPI benutzen musst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

I

Ich könnte mir aber vorstellen, dass das mit MFC möglicherweise gar nicht geht, du also die "rohe" WinAPI benutzen musst.

Na gut oder auch nicht. Dann versuche ich das erst mal mit einem offenen Proxy. Allerdings bekomme ich da immer noch die Meldung, dass der Servername oder die Serveradresse nicht verarbeitet werden konnten. Kann das am Makro _T bei

LPCTSTR pstrServer = _T("ftp://beispiel.org");
liegen? Dass das Makro falsch umwandelt?
int _tmain(int argc, _TCHAR* argv[])

	{

		if (!AfxWinInit(::GetModuleHandle(NULL), NULL, 

                    ::GetCommandLine(), 0))

    {


        return -1;

    }


	//Objekt session wird erzeugt


	 CInternetSession session(_T("My FTP Session",1, INTERNET_OPEN_TYPE_PROXY , "beispielproxy", NULL, 0));  

CFtpConnection *connection;




	//Deklarationen für GetFtpConnection Member-Funktion

	char servername[100]="ftp://beispiel.org"; 


	LPCTSTR pstrServer = _T("ftp://beispiel.org");

	LPCTSTR login = _T("user");

    LPCTSTR passwd = _T("password"); 

    INTERNET_PORT port = 21;

    BOOL bPassive = FALSE;



	cout << "Verbinde mit " << servername << " ...\n";


	try

	{


	//FTP-Verbindung wird eröffnet,Methode GetFtpConnection wird auf session angewandt, connection wird auf zurückgegeben Zeiger gesetzt

		if(connection = session.GetFtpConnection(pstrServer, login, passwd, port, bPassive)) 

			{

			cout << "Verbindung wurde aufgebaut";     

			}


	}

	catch (CInternetException* pEx)

    {

		cout<<"FEHLER : "<<GetLastError()<<endl;

        TCHAR sz[1024];

        pEx->GetErrorMessage(sz, 1024);

        printf_s("ERROR!  %S\n", sz);

        pEx->Delete();

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin, also wenn da auch nicht der Fehler ist, wo ist der dann.....

Kann diese Zeile Ursache für mein Problem sein?

CInternetSession session(_T("My FTP Session",1, INTERNET_OPEN_TYPE_PROXY , "beispiel.man.de.eu.beispiel.Corp:21", NULL, 0));

Ich erhalte für das Makro _T die Warnung das ich zu viele Parameter hätte.

Für jeden Parameter einzeln anwenden kann ich das Makro ja auch nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...