HTTP Anfrage -> es tritt immer eine Exception auf



  • Sorry, aber schon wieder nen Thread von mir 🤡

    Ich Frage in einem Dialog, den Server und die URI ab, dann führe ich in einem
    Thread folgenden Code aus:

    UINT InternetSteuerungsfkt (LPVOID pParam)
    {
    	CCommunication *ThreadCom = static_cast< CCommunication * >(pParam);
    	const UINT PUFFRGR = 1000;
    	CInternetSession InetSession;
    	CHttpConnection *pHttpCon = NULL;
    	CHttpFile *pHttpFile = NULL;
    	INTERNET_PORT Port = 80;
    	char *puffer = new char[PUFFRGR];
    
    	for (register int i = 0; i < ThreadCom->getCount (); i++)
    	{
    		try {
    
    			pHttpCon = InetSession.GetHttpConnection (ThreadCom->getServer (), Port);
    			pHttpFile = pHttpCon->OpenRequest (CHttpConnection::HTTP_VERB_GET, ThreadCom->getUri ());
    			pHttpFile->SendRequest ();
    			int BytesGelesen = pHttpFile->Read (puffer, PUFFRGR-1);
    			puffer[BytesGelesen] = '\0';
    			PostMessage (ThreadCom->getHwnd (), WM_STATUS, i, 0);
    			Sleep (ThreadCom->getPause () * 1000);
    
    		}
    		catch (CInternetException *e) {
    			e->Delete ();		
    		}
    	}
    
    	delete[] puffer;
    	delete pHttpFile;
    	delete pHttpCon;
    
    	return 0;
    }
    

    Die Klasse CCommunication dient der Kommunikation zwischen dem Thread und dem
    Hauptthread:

    class CCommunication
    {
    public:
    	CCommunication(CString &u, CString &s, int &p, int &c, HWND h);
    	~CCommunication(void);
    	const CString & getUri (void) const;
    	const CString & getServer (void) const;
    	const int & getPause (void) const;
    	const int & getCount (void) const;
    	const HWND  getHwnd (void) const;
    private:
    	CString m_server;
    	CString m_uri;
    	int m_pause;
    	int m_count;
    	HWND m_hWnd;
    };
    

    Der Thread wird so gestartet:

    void CChildView::OnDateiGet()
    {
    	CGDlg dlg;
    	dlg.DoModal ();
    	int count = atoi (dlg.m_count);
    	int pause = atoi (dlg.m_pause); 
    
    	CCommunication *ThreadCom = new CCommunication(dlg.m_server, dlg.m_uri, pause, count, GetSafeHwnd ());
    
    	CWinThread *pThread = AfxBeginThread (InternetSteuerungsfkt, ThreadCom);
    
    }
    

    Ich verstehe nicht weshalb ich eine Exception bekomme, wenn ich als Server
    localhost und als URI / angebe. Gebe ich das direkt im Code ein, funktioniert
    es doch auch. Könnt ihr mir hier vllt. sagen weshalb?
    Und wie kann ich den Errortyp bei einer CInternetException abfragen? In der Doku
    stand dazu nichts konkretes.



  • SirLant schrieb:

    Gebe ich das direkt im Code ein, funktioniert
    es doch auch.

    Hast Du mal geprüft ob die Variablen auch wirklich den richtigen Wert enthalten ?



  • Als ich mal alle Werte der Reihe nach ausgegeben habe, fiel mir auf, dass ich die
    Parameter für den server und uri vertauscht habe, beim Erzeugen des Objektes.
    Ich kann mich zwar nicht erinnern, wann ich da rumgespielt habe, aber anscheinend
    habe ich es, denn vorher hatte er die Daten immer richtig drin.

    Danke, dass du mich dazu aufgefordert hast nochmal alles zu checken, in Zukunft
    werde ich immer explizit checken, auch wenn ich denke es würde passen.



  • 1Problem habe ich aber immernoch, es funktioniert perfekt für 2Durchläufe im
    dritten Durchlauf bleibt er jedoch bei pHttpFile->SendRequest (); stehen, dann
    tut sich nichts mehr.
    Die dritte Anfrage kommt auch nie bei meinem Server an, da nichts in der access.log steht,
    die ersten zwei stehen wie alle Zugriffe drin.


Anmelden zum Antworten