Click here to Skip to main content
15,889,527 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I am getting status code 404 for the below code snippet.

Note: please add `<hostname>` when you are trying to figure out the issue.

HINTERNET m_hConnect;
HINTERNET m_hSession;
HINTERNET m_hRequest;

m_hSession = WinHttpOpen(userAgent,
WINHTTP_ACCESS_TYPE_NO_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0);

if (!m_hSession) {
printf("WinHttpOpen:Error %d has occurred.",GetLastError());
return 0;
}
// connect to the IPP server on the given port
m_hConnect = WinHttpConnect( m_hSession, <hostname>, 443, 0);

if (!m_hConnect) {
printf("WinHttpConnect: Error %d has occurred.",GetLastError());
return 0;
}

// Create an HTTP Request handle.
m_hRequest = WinHttpOpenRequest(m_hConnect, L"POST" ,L"/ipp",
L"HTTP/1.1", WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,WINHTTP_FLAG_SECURE);

if (!m_hRequest) {
printf("WinHttpOpenRequest:Error %d has occurred.",GetLastError());
return 0;
}

DWORD secureflags = SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_CERT_CN_INVALID |SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE | SECURITY_FLAG_IGNORE_CERT_DATE_INVALID;

BOOL bResult= WinHttpSetOption(m_hRequest, WINHTTP_OPTION_SECURITY_FLAGS, (LPVOID)&secureflags, sizeof(secureflags));
if (!bResult) {
printf("WinHttpSetOption:Error %d has occurred.",GetLastError());
return 0;
}

bResult = WinHttpSendRequest(m_hRequest, WINHTTP_NO_ADDITIONAL_HEADERS,0,WINHTTP_NO_REQUEST_DATA,0,0,0);
if (!bResult) {
printf("WinHttpSendRequest:Error %d has occurred.",GetLastError());
return 0;
}

if( !WinHttpReceiveResponse( m_hRequest, NULL ) )
{
if( GetLastError( ) == ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED )
{
HCERTSTORE hMyStore = 0;
PCCERT_CONTEXT pCertContext = 0;
WCHAR szCertName[256]={0};
//MY is the store the certificate is in.
hMyStore = CertOpenSystemStore( 0, TEXT("MY") );
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( m_hRequest,
WINHTTP_OPTION_CLIENT_CERT_CONTEXT,
(LPVOID) pCertContext,
sizeof(CERT_CONTEXT) );
CertFreeCertificateContext( pCertContext );
}
C
C++

ertCloseStore( hMyStore, 0 );

// NOTE: Application should now resend the request.
bResult = WinHttpSendRequest(m_hRequest, WINHTTP_NO_ADDITIONAL_HEADERS,0,WINHTTP_NO_REQUEST_DATA,0,0,0);
if (!bResult) {
printf("WinHttpSendRequest:Error %d has occurred.",GetLastError());
return 0;
}
}
}
}


DWORD dwStatusCode = 0;
DWORD dwSize = sizeof(DWORD);
BOOL bResults = true;

bResults = WinHttpQueryHeaders( m_hRequest, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, NULL, &dwStatusCode, &dwSize, NULL );

Result: I am getting status code of 404. I am not able to figure out why it is happening.

FYI, Using `WinINet`, I have followed the same procedure, I am getting status code of 200, which is success. But my requirement is to use only `WinHttp`.

Could any one please help me out to solve this issue. This is very urgent for me.
Posted

1 solution

Check your use of the proxy settings like with the flag WINHTTP_ACCESS_TYPE_DEFAULT_PROXY.
 
Share this answer
 
Comments
RajaPratap 3-Apr-15 2:14am    
Tried with WINHTTP_ACCESS_TYPE_DEFAULT_PROXY but nothing bought difference.Can you suggest any other way please.(this is for connecting through SSL)
Anil Kumar Musunuru 4-Apr-15 10:47am    
Could any one please help me on this?

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900