<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[httpS abfrage an einen webserver]]></title><description><![CDATA[<p>Hallo,<br />
ich versuche ein einfaches Programm zu schreiben, welches eine Abfrage per httpS (ssl) an einen Webserver schickt und die Antwort in eine Variable spiechert.</p>
<p>Nun ich habe es per LibCurl versucht, aber leider sagt mir Windows das Programm Funktioniert nicht mehr wenn die Funktion &quot;curl_easy_cleanup(curl);&quot; aufgerufen wird.</p>
<p>hier der Test code, welche in in Code::Blocks geschrieben habe. Ich habe die lib sowie das programm mit dem Selben Kompiler kompeliert: MinGw</p>
<p>Konfiguriet habe ich die Lib, in der MinGw Shell, vorm Kompelieren wie folgt:</p>
<pre><code>$ configure --disable-shared  --enable-static --with-winssl
</code></pre>
<p>und anschliessend mit make kompeliert.</p>
<p>das Programm:</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;curl/curl.h&gt;

int main(void)
{
    char url[255]       = &quot;https://google.de&quot;;

    CURL *curl;
    CURLcode res;
    curl_global_init(CURL_GLOBAL_ALL);

    curl = curl_easy_init();
    if(curl)
    {
        curl_easy_setopt(curl, CURLOPT_URL, url);

        res = curl_easy_perform(curl);
        if(res != CURLE_OK)
        {
            fprintf(stderr, &quot;curl_easy_perform() failed: %s\n&quot;,
            curl_easy_strerror(res));
        }
        else
        {
            //mach was
        }

        curl_easy_cleanup(curl); //&lt;--- wenn das gemacht wird stürzt es ab
    }
    curl_global_cleanup();
    return 0;
}
</code></pre>
<p>Kompeliert ohne fehler und gibt sogar ein brauchbares Ergebnis aus, nur stürzt es ab und beendet sich daher nicht korrekt.</p>
<p>Auch habe ich versucht mit MS Visual Studio Exrpess eine Lösung zu finden:</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;winhttp.h&gt;
#include &lt;schannel.h&gt;
#include &lt;stdio.h&gt;
#include &lt;iostream&gt;

#pragma comment(lib, &quot;winhttp.lib&quot;)

void main(){

	char y;

    DWORD dwSize = 0;
    DWORD dwDownloaded = 0;
    LPSTR pszOutBuffer;
    BOOL  bResults = FALSE;
    HINTERNET  hSession = NULL, 
               hConnect = NULL,
               hRequest = NULL;

    // Use WinHttpOpen to obtain a session handle.
    hSession = WinHttpOpen( L&quot;WinHTTP Example/1.0&quot;,  
                            WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
                            WINHTTP_NO_PROXY_NAME, 
                            WINHTTP_NO_PROXY_BYPASS, 0);

    // Specify an HTTP server.
    if (hSession)
        hConnect = WinHttpConnect( hSession, L&quot;https://google.de&quot;,
                                   INTERNET_DEFAULT_HTTPS_PORT, 0);

    // Create an HTTP request handle.
    if (hConnect)
        hRequest = WinHttpOpenRequest( hConnect, L&quot;GET&quot;, NULL,
                                       NULL, WINHTTP_NO_REFERER, 
                                       WINHTTP_DEFAULT_ACCEPT_TYPES, 
                                       WINHTTP_FLAG_SECURE);

    // Send a request.
    if (hRequest)
        bResults = WinHttpSendRequest( hRequest,
                                       WINHTTP_NO_ADDITIONAL_HEADERS,
                                       0, WINHTTP_NO_REQUEST_DATA, 0, 
                                       0, 0);

	if( !WinHttpReceiveResponse( hRequest, NULL ) )
	{
		if( GetLastError( ) == ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED )
		{
			//MY is the store the certificate is in.
			hMyStore = CertOpenSystemStore( 0, TEXT(&quot;MY&quot;) );
			if( hMyStore )
			{
			pCertContext = CertFindCertificateInStore( hMyStore,
					X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
					0,
					CERT_FIND_SUBJECT_STR,
					(LPVOID) szCertName, //Subject string in the certificate.
					NULL );
			if( pCertContext )
			{
				WinHttpSetOption( hRequest, 
								WINHTTP_OPTION_CLIENT_CERT_CONTEXT,
								(LPVOID) pCertContext, 
								sizeof(CERT_CONTEXT) );
				CertFreeCertificateContext( pCertContext );
			}
			CertCloseStore( hMyStore, 0 );

			// NOTE: Application should now resend the request.
			}
		}
	}

    // End the request.
    if (bResults)
        bResults = WinHttpReceiveResponse( hRequest, NULL);

    // Keep checking for data until there is nothing left.
    if (bResults)
        do 
        {
            // Check for available data.
            dwSize = 0;
            if (!WinHttpQueryDataAvailable( hRequest, &amp;dwSize))
                printf(&quot;Error %u in WinHttpQueryDataAvailable.\n&quot;, GetLastError());

            // Allocate space for the buffer.
            pszOutBuffer = new char[dwSize+1];
            if (!pszOutBuffer)
            {
                printf(&quot;Out of memory\n&quot;);
                dwSize=0;
            }
            else
            {
                // Read the Data.
                ZeroMemory(pszOutBuffer, dwSize+1);

                if (!WinHttpReadData( hRequest, (LPVOID)pszOutBuffer, 
                                      dwSize, &amp;dwDownloaded))
                    printf( &quot;Error %u in WinHttpReadData.\n&quot;, GetLastError());
                else
                    printf( &quot;%s\n&quot;, pszOutBuffer);

                // Free the memory allocated to the buffer.
                delete [] pszOutBuffer;
            }

        } while (dwSize &gt; 0);

    // Report any errors.
    if (!bResults)
        printf(&quot;Error %d has occurred.\n&quot;, GetLastError());

    // Close any open handles.
    if (hRequest) WinHttpCloseHandle(hRequest);
    if (hConnect) WinHttpCloseHandle(hConnect);
    if (hSession) WinHttpCloseHandle(hSession);

	std::cin &gt;&gt; y;

}
</code></pre>
<p>dies lässt sich aber garnicht erst Kompeliern:</p>
<blockquote>
<p>1&gt;------ Erstellen gestartet: Projekt: test2, Konfiguration: Debug Win32 ------<br />
1&gt; test.cpp<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(52): error C2065: 'hMyStore': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(53): error C2065: 'hMyStore': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(55): error C2065: 'pCertContext': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(55): error C2065: 'hMyStore': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(59): error C2065: 'szCertName': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(61): error C2065: 'pCertContext': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(65): error C2065: 'pCertContext': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(67): error C2065: 'pCertContext': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(69): error C2065: 'hMyStore': nichtdeklarierter Bezeichner<br />
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========</p>
</blockquote>
<p>Am beste fände ich es wenn ich eine möglichkeit hätte den fehler bei der libcurl zu beheben, da dort das code sich für meine Problemstellung viel einfacher gestaltet als der &quot;Microsoft&quot; code.</p>
<p>Ich habe schon viel Zeit in Google investiert und wirklich nicht viel zum Thema gefunden, was ich gebrauchen könnte. Zum MS Code habe quasie garnichts gefunden.<br />
sobalt es um httpS geht finde ich nichts mehr.</p>
<p>Weiss Jemand eine lösung für das Problem? Wäre mir sehr hilfreich.</p>
<p>Gruß<br />
S.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/316261/https-abfrage-an-einen-webserver</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Jul 2026 09:36:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/316261.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 27 Apr 2013 11:03:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to httpS abfrage an einen webserver on Sat, 27 Apr 2013 11:03:42 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich versuche ein einfaches Programm zu schreiben, welches eine Abfrage per httpS (ssl) an einen Webserver schickt und die Antwort in eine Variable spiechert.</p>
<p>Nun ich habe es per LibCurl versucht, aber leider sagt mir Windows das Programm Funktioniert nicht mehr wenn die Funktion &quot;curl_easy_cleanup(curl);&quot; aufgerufen wird.</p>
<p>hier der Test code, welche in in Code::Blocks geschrieben habe. Ich habe die lib sowie das programm mit dem Selben Kompiler kompeliert: MinGw</p>
<p>Konfiguriet habe ich die Lib, in der MinGw Shell, vorm Kompelieren wie folgt:</p>
<pre><code>$ configure --disable-shared  --enable-static --with-winssl
</code></pre>
<p>und anschliessend mit make kompeliert.</p>
<p>das Programm:</p>
<pre><code>#include &lt;stdio.h&gt;
#include &lt;curl/curl.h&gt;

int main(void)
{
    char url[255]       = &quot;https://google.de&quot;;

    CURL *curl;
    CURLcode res;
    curl_global_init(CURL_GLOBAL_ALL);

    curl = curl_easy_init();
    if(curl)
    {
        curl_easy_setopt(curl, CURLOPT_URL, url);

        res = curl_easy_perform(curl);
        if(res != CURLE_OK)
        {
            fprintf(stderr, &quot;curl_easy_perform() failed: %s\n&quot;,
            curl_easy_strerror(res));
        }
        else
        {
            //mach was
        }

        curl_easy_cleanup(curl); //&lt;--- wenn das gemacht wird stürzt es ab
    }
    curl_global_cleanup();
    return 0;
}
</code></pre>
<p>Kompeliert ohne fehler und gibt sogar ein brauchbares Ergebnis aus, nur stürzt es ab und beendet sich daher nicht korrekt.</p>
<p>Auch habe ich versucht mit MS Visual Studio Exrpess eine Lösung zu finden:</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;winhttp.h&gt;
#include &lt;schannel.h&gt;
#include &lt;stdio.h&gt;
#include &lt;iostream&gt;

#pragma comment(lib, &quot;winhttp.lib&quot;)

void main(){

	char y;

    DWORD dwSize = 0;
    DWORD dwDownloaded = 0;
    LPSTR pszOutBuffer;
    BOOL  bResults = FALSE;
    HINTERNET  hSession = NULL, 
               hConnect = NULL,
               hRequest = NULL;

    // Use WinHttpOpen to obtain a session handle.
    hSession = WinHttpOpen( L&quot;WinHTTP Example/1.0&quot;,  
                            WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
                            WINHTTP_NO_PROXY_NAME, 
                            WINHTTP_NO_PROXY_BYPASS, 0);

    // Specify an HTTP server.
    if (hSession)
        hConnect = WinHttpConnect( hSession, L&quot;https://google.de&quot;,
                                   INTERNET_DEFAULT_HTTPS_PORT, 0);

    // Create an HTTP request handle.
    if (hConnect)
        hRequest = WinHttpOpenRequest( hConnect, L&quot;GET&quot;, NULL,
                                       NULL, WINHTTP_NO_REFERER, 
                                       WINHTTP_DEFAULT_ACCEPT_TYPES, 
                                       WINHTTP_FLAG_SECURE);

    // Send a request.
    if (hRequest)
        bResults = WinHttpSendRequest( hRequest,
                                       WINHTTP_NO_ADDITIONAL_HEADERS,
                                       0, WINHTTP_NO_REQUEST_DATA, 0, 
                                       0, 0);

	if( !WinHttpReceiveResponse( hRequest, NULL ) )
	{
		if( GetLastError( ) == ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED )
		{
			//MY is the store the certificate is in.
			hMyStore = CertOpenSystemStore( 0, TEXT(&quot;MY&quot;) );
			if( hMyStore )
			{
			pCertContext = CertFindCertificateInStore( hMyStore,
					X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
					0,
					CERT_FIND_SUBJECT_STR,
					(LPVOID) szCertName, //Subject string in the certificate.
					NULL );
			if( pCertContext )
			{
				WinHttpSetOption( hRequest, 
								WINHTTP_OPTION_CLIENT_CERT_CONTEXT,
								(LPVOID) pCertContext, 
								sizeof(CERT_CONTEXT) );
				CertFreeCertificateContext( pCertContext );
			}
			CertCloseStore( hMyStore, 0 );

			// NOTE: Application should now resend the request.
			}
		}
	}

    // End the request.
    if (bResults)
        bResults = WinHttpReceiveResponse( hRequest, NULL);

    // Keep checking for data until there is nothing left.
    if (bResults)
        do 
        {
            // Check for available data.
            dwSize = 0;
            if (!WinHttpQueryDataAvailable( hRequest, &amp;dwSize))
                printf(&quot;Error %u in WinHttpQueryDataAvailable.\n&quot;, GetLastError());

            // Allocate space for the buffer.
            pszOutBuffer = new char[dwSize+1];
            if (!pszOutBuffer)
            {
                printf(&quot;Out of memory\n&quot;);
                dwSize=0;
            }
            else
            {
                // Read the Data.
                ZeroMemory(pszOutBuffer, dwSize+1);

                if (!WinHttpReadData( hRequest, (LPVOID)pszOutBuffer, 
                                      dwSize, &amp;dwDownloaded))
                    printf( &quot;Error %u in WinHttpReadData.\n&quot;, GetLastError());
                else
                    printf( &quot;%s\n&quot;, pszOutBuffer);

                // Free the memory allocated to the buffer.
                delete [] pszOutBuffer;
            }

        } while (dwSize &gt; 0);

    // Report any errors.
    if (!bResults)
        printf(&quot;Error %d has occurred.\n&quot;, GetLastError());

    // Close any open handles.
    if (hRequest) WinHttpCloseHandle(hRequest);
    if (hConnect) WinHttpCloseHandle(hConnect);
    if (hSession) WinHttpCloseHandle(hSession);

	std::cin &gt;&gt; y;

}
</code></pre>
<p>dies lässt sich aber garnicht erst Kompeliern:</p>
<blockquote>
<p>1&gt;------ Erstellen gestartet: Projekt: test2, Konfiguration: Debug Win32 ------<br />
1&gt; test.cpp<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(52): error C2065: 'hMyStore': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(53): error C2065: 'hMyStore': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(55): error C2065: 'pCertContext': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(55): error C2065: 'hMyStore': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(59): error C2065: 'szCertName': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(61): error C2065: 'pCertContext': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(65): error C2065: 'pCertContext': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(67): error C2065: 'pCertContext': nichtdeklarierter Bezeichner<br />
1&gt;c:\users\seb\documents\visual studio 2010\projects\test2\test2\test.cpp(69): error C2065: 'hMyStore': nichtdeklarierter Bezeichner<br />
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========</p>
</blockquote>
<p>Am beste fände ich es wenn ich eine möglichkeit hätte den fehler bei der libcurl zu beheben, da dort das code sich für meine Problemstellung viel einfacher gestaltet als der &quot;Microsoft&quot; code.</p>
<p>Ich habe schon viel Zeit in Google investiert und wirklich nicht viel zum Thema gefunden, was ich gebrauchen könnte. Zum MS Code habe quasie garnichts gefunden.<br />
sobalt es um httpS geht finde ich nichts mehr.</p>
<p>Weiss Jemand eine lösung für das Problem? Wäre mir sehr hilfreich.</p>
<p>Gruß<br />
S.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2318955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2318955</guid><dc:creator><![CDATA[seb-eisdrache]]></dc:creator><pubDate>Sat, 27 Apr 2013 11:03:42 GMT</pubDate></item><item><title><![CDATA[Reply to httpS abfrage an einen webserver on Sat, 27 Apr 2013 12:54:10 GMT]]></title><description><![CDATA[<blockquote>
<p>dies lässt sich aber garnicht erst Kompeliern:</p>
</blockquote>
<p>Da fehlen die Deklarationen und Definitionen einiger Bezeichner die der Compiler bemängelt. Am besten so vorgehen:<br />
1. Fehlermeldung ansehen, z.B. <code>hMyStore</code> fehlt.<br />
2. Lokalisieren wo dieser das erste Mal benutzt wird, z.B. bei <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa376560(v=vs.85).aspx" rel="nofollow">CertOpenSystemStore(..)</a><br />
3. Den fehlenden Code einfügen, z.B.</p>
<pre><code>// Anstatt:
hMyStore = CertOpenSystemStore(..);
// einfach so:
HCERTSTORE hMyStore = CertOpenSystemStore(..);
</code></pre>
<p>Was für Typen die Bezeichner brauchen, kannst du mit googeln der entsprechenden Funktionen herausfinden (wie die MSDN Seite die ich dir verlinkt habe).<br />
4. Neu kompilieren und prüfen ob der eine Fehler verschwindet.<br />
5. Nächstes Problem lösen..</p>
<p>Zum Curl Problem kann ich nicht viel sagen. Aber du könntest noch ein weniger genauer erläutern, wie der Absturz aussieht (Segfault, Exception, ec.). Hast du schon gedebugt?</p>
<p>Gruss Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2318967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2318967</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Sat, 27 Apr 2013 12:54:10 GMT</pubDate></item><item><title><![CDATA[Reply to httpS abfrage an einen webserver on Sat, 27 Apr 2013 21:30:08 GMT]]></title><description><![CDATA[<p>Hallo<br />
Ich habe die Libcurl variante mal durch den Codeblocks Debugger geschickt und erhalte da nun folgendes:</p>
<blockquote>
<p>Building to ensure sources are up-to-date<br />
Selecting target:<br />
Debug<br />
Adding source dir: C:\Users\Seb\Documents\test\<br />
Adding source dir: C:\Users\Seb\Documents\test\<br />
Adding file: C:\Users\Seb\Documents\test\bin\Debug\test.exe<br />
Changing directory to: C:/Users/Seb/Documents/test/.<br />
Set variable: PATH=.;C:\MinGW\bin;C:\MinGW;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files (x86)\Smart Projects\IsoBuster<br />
Starting debugger: C:\Program Files (x86)\CodeBlocks\MINGW\bin\gdb.exe -nx -fullname -quiet -args C:/Users/Seb/Documents/test/bin/Debug/test.exe<br />
done<br />
Registered new type: wxString<br />
Registered new type: STL String<br />
Registered new type: STL Vector<br />
Setting breakpoints<br />
Debugger name and version: GNU gdb (GDB) 7.5<br />
Child process PID: 3676<br />
Program received signal SIGSEGV, Segmentation fault.<br />
In Curl_ssl_getsessionid () ()<br />
Debugger finished with status 0</p>
</blockquote>
<p>wenn ich noch ein</p>
<pre><code>curl_easy_setopt(curl, CURLOPT_SSL_SESSIONID_CACHE, 0);
</code></pre>
<p>hinzufüge, läuft das Programm im debugger tadellos, aber wenn ich es dann manuell ausführe stürzt es wieder ab.</p>
<p>------</p>
<p>Zum MS part:</p>
<p>ich habe den Code angepasst.</p>
<p>Irgendwie schon komisch das der eigentlich fast (SSL Teil) 1:1 von der MS seite ist und nicht Funktioniert.</p>
<pre><code>#include &lt;windows.h&gt;
#include &lt;winhttp.h&gt;
#include &lt;schannel.h&gt;
#include &lt;stdio.h&gt;
#include &lt;iostream&gt;

#pragma comment(lib, &quot;winhttp.lib&quot;)

void main(){

	char y;

    DWORD dwSize = 0;
    DWORD dwDownloaded = 0;
    LPSTR pszOutBuffer;
	LPCSTR szCertName = (LPCSTR) &quot;Cert_subject_1&quot;;
    BOOL  bResults = FALSE;
    HINTERNET  hSession = NULL, 
               hConnect = NULL,
               hRequest = NULL;

    // Use WinHttpOpen to obtain a session handle.
    hSession = WinHttpOpen( L&quot;WinHTTP Example/1.0&quot;,  
                            WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
                            WINHTTP_NO_PROXY_NAME, 
                            WINHTTP_NO_PROXY_BYPASS, 0);

    // Specify an HTTP server.
    if (hSession)
        hConnect = WinHttpConnect( hSession, L&quot;https://google.de&quot;,
                                   INTERNET_DEFAULT_HTTPS_PORT, 0);

    // Create an HTTP request handle.
    if (hConnect)
        hRequest = WinHttpOpenRequest( hConnect, L&quot;GET&quot;, NULL,
                                       NULL, WINHTTP_NO_REFERER, 
                                       WINHTTP_DEFAULT_ACCEPT_TYPES, 
                                       WINHTTP_FLAG_SECURE);

    // Send a request.
    if (hRequest)
        bResults = WinHttpSendRequest( hRequest,
                                       WINHTTP_NO_ADDITIONAL_HEADERS,
                                       0, WINHTTP_NO_REQUEST_DATA, 0, 
                                       0, 0);

	if( !WinHttpReceiveResponse( hRequest, NULL ) )
	{
		if( GetLastError( ) == ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED )
		{
			//MY is the store the certificate is in.
			HCERTSTORE hMyStore = CertOpenSystemStore( 0, TEXT(&quot;MY&quot;) );
			if( hMyStore )
			{
			PCCERT_CONTEXT pCertContext = CertFindCertificateInStore( hMyStore,
					X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
					0,
					CERT_FIND_SUBJECT_STR,
					(LPVOID) szCertName, //Subject string in the certificate.
					NULL );
			if( pCertContext )
			{
				WinHttpSetOption( hRequest, 
								WINHTTP_OPTION_CLIENT_CERT_CONTEXT,
								(LPVOID) pCertContext, 
								sizeof(CERT_CONTEXT) );
				CertFreeCertificateContext( pCertContext );
			}
			CertCloseStore( hMyStore, 0 );

			// NOTE: Application should now resend the request.
			}
		}
	}

    // End the request.
    if (bResults)
        bResults = WinHttpReceiveResponse( hRequest, NULL);

    // Keep checking for data until there is nothing left.
    if (bResults)
        do 
        {
            // Check for available data.
            dwSize = 0;
            if (!WinHttpQueryDataAvailable( hRequest, &amp;dwSize))
                printf(&quot;Error %u in WinHttpQueryDataAvailable.\n&quot;, GetLastError());

            // Allocate space for the buffer.
            pszOutBuffer = new char[dwSize+1];
            if (!pszOutBuffer)
            {
                printf(&quot;Out of memory\n&quot;);
                dwSize=0;
            }
            else
            {
                // Read the Data.
                ZeroMemory(pszOutBuffer, dwSize+1);

                if (!WinHttpReadData( hRequest, (LPVOID)pszOutBuffer, 
                                      dwSize, &amp;dwDownloaded))
                    printf( &quot;Error %u in WinHttpReadData.\n&quot;, GetLastError());
                else
                    printf( &quot;%s\n&quot;, pszOutBuffer);

                // Free the memory allocated to the buffer.
                delete [] pszOutBuffer;
            }

        } while (dwSize &gt; 0);

    // Report any errors.
    if (!bResults)
        printf(&quot;Error %d has occurred.\n&quot;, GetLastError());

    // Close any open handles.
    if (hRequest) WinHttpCloseHandle(hRequest);
    if (hConnect) WinHttpCloseHandle(hConnect);
    if (hSession) WinHttpCloseHandle(hSession);

	std::cin &gt;&gt; y;

}
</code></pre>
<p>der Kompiler sagt mir dazu folgendes:</p>
<blockquote>
<p>1&gt;------ Erstellen gestartet: Projekt: test2, Konfiguration: Debug Win32 ------<br />
1&gt; test.cpp<br />
1&gt;test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;__imp__CertCloseStore@8&quot; in Funktion &quot;_main&quot;.<br />
1&gt;test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;__imp__CertFreeCertificateContext@4&quot; in Funktion &quot;_main&quot;.<br />
1&gt;test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;__imp__CertFindCertificateInStore@24&quot; in Funktion &quot;_main&quot;.<br />
1&gt;test.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;__imp__CertOpenSystemStoreW@8&quot; in Funktion &quot;_main&quot;.<br />
1&gt;C:\Users\Seb\documents\visual studio 2010\Projects\test2\Debug\test2.exe : fatal error LNK1120: 4 nicht aufgelöste externe Verweise.<br />
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2319034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2319034</guid><dc:creator><![CDATA[seb-eisdrache]]></dc:creator><pubDate>Sat, 27 Apr 2013 21:30:08 GMT</pubDate></item></channel></rss>