Guybrush Threepwood Geschrieben 23. September 2003 Geschrieben 23. September 2003 Hi, ich habe folgendes Programm, mit dem ich eine Datei von einem Webserver runterladen möchte. Allerdings gibt es noch ein Problem, ich sitze hier hinter einem Proxyserver und wenn ich HttpSendRequest() aufrufe, bekomme ich den Fehler das ich mich erst am Proxy anmelden muß. Wenn ich das dann erledigt habe und HttpSendRequest() erneut aufrufe, bekomme ich jedesmal einen Timeout. Wenn ich bei InternetOpen angebe das ich hinter einen Proxy sitze (ohne den Namen anzugeben), läuft das Programm wenn auf dem PC der Microsoft Proxy Client installiert ist, ohne das ich mich anmelden muss. Ansonsten kann er die Adresse nicht auflösen. Wenn ich bei InernetOpen zusätzlich noch den Namen des Proxys angeben, habe ich das selbe Problem wie wenn ich nichts angebe. :confused: Hier habt ihr mal den gesamten Code: #include <stdio.h> #include <conio.h> #include <windows.h> #include <wininet.h> #pragma comment(lib,"wininet.lib") main() { HINTERNET hInternet; HINTERNET hConnect; HINTERNET hRequest; DWORD dwRead =1; char c[1000]; hInternet = InternetOpen("Microsoft Internet Explorer",NULL,NULL,NULL,NULL); if (hInternet == NULL) { printf ("fehler1\n"); } else { printf ("ok\n"); hConnect = InternetConnect(hInternet,"xxx.yyy.zzz",INTERNET_DEFAULT_HTTP_PORT, "","",INTERNET_SERVICE_HTTP, NULL,NULL); if (hConnect == NULL) { printf ("fehler2\n"); } else { printf ("ok\n"); hRequest = HttpOpenRequest(hConnect,NULL,"test/test2/test.zip",NULL,"", NULL,NULL,NULL); if (hRequest == NULL) { printf ("fehler3\n"); } else { printf ("ok\n"); ok: if (!HttpSendRequest(hRequest,NULL,NULL,NULL,NULL)) { DWORD er,w=1000; char r[1000]; InternetGetLastResponseInfo(&er,r,&w); printf ("\n%s -> %i",r,er); printf ("nicht gesendet->%i",GetLastError()); } else { DWORD dwCode,dwSize=40; if (HttpQueryInfo(hRequest,HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwCode,&dwSize,NULL)) printf ("query\n"); if (dwCode == HTTP_STATUS_PROXY_AUTH_REQ) { printf ("anmelden!\n"); dwRead = 1; while(dwRead != NULL) if (!InternetReadFile(hRequest,c,1000,&dwRead)) printf ("\nkann nicht lesen->%i",GetLastError()); if (InternetErrorDlg (GetDesktopWindow(),hRequest, ERROR_INTERNET_INCORRECT_PASSWORD, FLAGS_ERROR_UI_FILTER_FOR_ERRORS | FLAGS_ERROR_UI_FLAGS_GENERATE_DATA | FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS,NULL) == ERROR_INTERNET_FORCE_RETRY) { printf ("neuer versuch\n"); goto ok; } else { printf ("chanceld\n"); } } else { printf ("gesendet\n"); FILE* stream = fopen("c:\\update.zip","wb"); if (stream == NULL) printf ("kann datei nicht erstellen\n"); else { dwRead=1; while(dwRead != NULL) { if (InternetReadFile(hRequest,c,1000,&dwRead) == false) { printf ("kann nicht lesen->%i",GetLastError()); dwRead = NULL; } else { fwrite(c,sizeof(char),dwRead,stream); printf ("schreibe: %i\n",dwRead); } } fclose(stream); } } } InternetCloseHandle(hRequest); } InternetCloseHandle(hConnect); } InternetCloseHandle(hInternet); } printf ("\nfertig\n"); getch(); return 0; } [/PHP] Das war zwar jetzt alles ein bischen viel, aber ich hoffe das mir trotzdem jemand helfen kann. Gruß Guybrush PS: Das goto bleibt natürlich nur in der Testversion drin;) Zitieren
Guybrush Threepwood Geschrieben 23. September 2003 Autor Geschrieben 23. September 2003 Habs selber gelöst. Ich hab dummerweise HttpOpenRequest() die INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_RELOAD Flags an der falschen Stelle übergeben:rolleyes: Naja hauptsache wieder ein paar Tage umsonst gearbeitet:( Zitieren
Empfohlene Beiträge
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.