hello jkr,
sending the code for more clarity.. i think its correct but still getting the error..
#include <stdio.h>
#include <windows.h>
#include<WinInet.h>
void main()
{
DWORD dwVal;
BOOL bInternetExists = InternetGetConnectedState(&dwVal, 0);
if(bInternetExists != TRUE){
MessageBox(NULL, «Failure while Check internet connection», «Oh man!!!!!!», MB_OK);
return;
}
LPCTSTR lpszAgent = «WinInetGet/0.1»;
HINTERNET hInternet = InternetOpen(lpszAgent, INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0);
if(hInternet == NULL){
MessageBox(NULL, «Failure while InternetOpen», «Oh man!!!!!!», MB_OK);
return;
}
LPCTSTR lpszServerName = «URL»; //Some URL
INTERNET_PORT nServerPort = INTERNET_DEFAULT_HTTP_PORT;
LPCTSTR lpszUserName = NULL;
LPCTSTR lpszPassword = NULL;
DWORD dwConnectFlags = 0;
DWORD dwConnectContext = 0;
HINTERNET hConnect = InternetConnect(hInternet,
lpszServerName, nServerPort,
lpszUserName, lpszPassword,
INTERNET_SERVICE_HTTP,
dwConnectFlags, dwConnectContext);
if(hConnect == NULL){
MessageBox(NULL, «Failure while InternetConnect», «Oh man!!!!!!», MB_OK);
return;
}
LPCTSTR lpszVerb = «POST»;
LPCTSTR lpszObjectName = «XMLDATA=»;
LPCTSTR lpszVersion = NULL; // Use default.
LPCTSTR lpszReferrer = NULL; // No referrer.
LPTSTR lplpszAcceptTypes[] = {«text/*»};
DWORD dwOpenRequestFlags = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP |
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS |
INTERNET_FLAG_KEEP_CONNECTION |
INTERNET_FLAG_NO_AUTH |
INTERNET_FLAG_NO_AUTO_REDIRECT |
INTERNET_FLAG_NO_UI |
INTERNET_FLAG_RELOAD;
DWORD dwOpenRequestContext = 0;
HINTERNET hRequest = HttpOpenRequest(hConnect, lpszVerb, lpszObjectName, lpszVersion,
lpszReferrer, (LPCTSTR*)lplpszAcceptTypes, dwOpenRequestFlags, dwOpenRequestContext);
if(hRequest == NULL){
MessageBox(NULL, «Failure while HTTPOpen», «Oh man!!!!!!», MB_OK);
return;
}
FILE *fp = NULL;
char buf[5000], buf1[5000];
int i = 0;
fp = fopen(«E:\TrayIcon\conslog.xml», «r»);
while(!feof(fp)){
buf[i++] = fgetc(fp);
}
buf[i] = »;
fclose(fp);
strcpy(buf1, «xmldata=»);
strcat(buf1, buf);
char st[] = «Content-Type: text/*rn»;
BOOL bResult = HttpSendRequest(hRequest, st, strlen(st), buf1, strlen(buf1));
if(bResult == FALSE){
int er = GetLastError();
fprintf(stderr, «HttpSendRequest failed, error = %d (0x%x)n»,
GetLastError(), GetLastError());
}
DWORD dwInfoLevel = HTTP_QUERY_RAW_HEADERS_CRLF;
DWORD dwInfoBufferLength = 10;
BYTE *pInfoBuffer = (BYTE *)malloc(dwInfoBufferLength+1);
memset(pInfoBuffer, 0, dwInfoBufferLength+1);
while (!HttpQueryInfo(hRequest, dwInfoLevel, pInfoBuffer, &dwInfoBufferLength, NULL))
{
DWORD dwError = GetLastError();
if (dwError == ERROR_INSUFFICIENT_BUFFER)
{
free(pInfoBuffer);
pInfoBuffer = (BYTE *)malloc(dwInfoBufferLength+1);
}
else
{
fprintf(stderr, «HttpQueryInfo failed, error = %d (0x%x)n»,
GetLastError(), GetLastError());
break;
}
}
pInfoBuffer[dwInfoBufferLength] = »;
printf(«%s», pInfoBuffer);
free(pInfoBuffer);
DWORD dwBytesAvailable;
while (InternetQueryDataAvailable(hRequest, &dwBytesAvailable, 0, 0))
{
BYTE *pMessageBody = (BYTE *)malloc(dwBytesAvailable+1);
DWORD dwBytesRead;
BOOL bResult = InternetReadFile(hRequest, pMessageBody,
dwBytesAvailable, &dwBytesRead);
if (!bResult)
{
fprintf(stderr, «InternetReadFile failed, error = %d (0x%x)n»,
GetLastError(), GetLastError());
break;
}
if (dwBytesRead == 0)
break; // End of File.
pMessageBody[dwBytesRead] = »;
printf(«%s», pMessageBody);
free(pMessageBody);
}
InternetCloseHandle(hInternet);
InternetCloseHandle(hConnect);
InternetCloseHandle(hRequest);
}
bye
Archived Forums 481-500
>
Windows Desktop SDK
-
Question
-
0
Sign in to vote
I am writing a HTTPS application using WIninet APis.I am adding the necessary headers. ANd calling HttpSendRequest.This APis is giving me 12152 error code which means The server response could not be parsed .I dont why it is happening.Pls help me.
Tuesday, June 2, 2009 3:51 PM
All replies
-
0
Sign in to vote
Maybe you are using a wrong authentication header. Write an asp.net or ISAPI extension application to check the header.
MSMVP VC++
Tuesday, June 2, 2009 4:54 PM
Windows Server 2012 R2 Datacenter Windows Server 2012 R2 Standard Windows Server 2012 R2 Essentials Windows Server 2012 R2 Foundation Windows 8.1 Enterprise Windows 8.1 Pro Windows 8.1 Еще…Меньше
Симптомы
Рассмотрим следующие сценарии:
-
Имеется устройство, которое поддерживает удаленное управление с помощью командлетов представление системы физического компьютера (PCSV).
-
Войдите в систему компьютера под управлением Windows Server 2012 R2 или Windows 8.1 и затем запустить командлет Windows PowerShell Get-PcsvDevice для удаленного управления устройством.
В этом случае появляется сообщение об ошибке, подобное приведенному ниже:
Get-PcsvDevice: WS-Management не удается обработать запрос. Операция не выполнена из-за ошибки HTTP. Ошибка HTTP (12152): сервер вернул ошибочный или нераспознанный ответ.
Решение
Для решения этой проблемы установите набор обновлений 2984006. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
2984006 сентября 2014 накопительный пакет обновления для Windows RT 8.1, Windows 8.1 и Windows Server 2012 R2
Статус
Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе «Относится к».
Дополнительные сведения
Дополнительные сведения о PCSV посетите следующий веб-узел корпорации Майкрософт:
Общие сведения о PCSVДополнительные сведения о командлетах PCSV посетите следующий веб-узел корпорации Майкрософт:
Общие сведения о командлетах PCSVДля получения дополнительных сведений о терминологии обновлений программного обеспечения щелкните следующий номер статьи базы знаний Майкрософт:
Описание 824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт
Нужна дополнительная помощь?
Модуль расширения веб-сервера для AAPACHE (работает на Linux) (см.здесь)Напишите текст пост-запроса от клиента от клиента в каталог, клиент отправляет код следующим образом (неполным):
Strcpy (szurl, "http://www.xxx.com") // xxx - просто объяснить проблему
if (!::InternetCheckConnection(szURL, FLAG_ICC_FORCE_CONNECTION, 0))
return FALSE;
TCHAR szModuleFile[MAX_PATH] = {0};
::GetModuleFileName(NULL, szModuleFile, MAX_PATH);
LPCTSTR lpPath = ::PathFindFileName(szModuleFile);
HINTERNET hOpen = ::InternetOpen(lpPath, INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0);
if (NULL == hOpen)
return FALSE;
HINTERNET hConnect = ::InternetConnect(hOpen, lpDomain, dwPort, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
if (NULL == hConnect)
goto FUN_END2;
LPCTSTR szAccept[] = {_T("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"), NULL};
DWORD dwFlag = INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_RELOAD | INTERNET_FLAG_KEEP_CONNECTION;
HINTERNET hOpenRequest = ::HttpOpenRequest(hConnect, _T("POST"), _T("my_app"),
_T («HTTP / 1.1»), SZURL, Szaccept, DWFLAG, 0); // my_app - это модуль расширения Apache C ++.
if (NULL == hOpenRequest)
goto FUN_END1;
BOOL bRet = FALSE;
TCHAR headerContentLength[64];
_stprintf(headerContentLength, _T("Content-Length: %drnrn"), nLen);
// Это утверждение отправляет данные на http://www.xxx.com/my_app.
bRet = ::HttpSendRequest(hOpenRequest, headerContentLength, _tcslen(headerContentLength), utf8PostData, nLen);
DWORD dwErr = ::GetLastError();
if (!bRet) goto FUN_END1;
TCHAR szBuff[BUF_LEN_1024] = {0};
DWORD dwBuffSize = BUF_LEN_1024*sizeof(szBuff)-2;
bRet = ::HttpQueryInfo(hOpenRequest, HTTP_QUERY_STATUS_CODE, (LPVOID)szBuff, &dwBuffSize, NULL);
//Reference to http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
int nStatusCode = _tstoi(szBuff);
//if (nStatusCode<200 || 206<nStatusCode)
if (200 != nStatusCode)
bRet = FALSE;
......
Во время процесса отладки HTTPSEndRequest всегда возвращает FALSE, код ошибки — 12152 (определение MSDN, ERROR_HTTP_INVALID_SERVER_RESPONS, ответ на сервер не может быть пропущен). Его можно найти, сеть нормально, 3 рукопожатия, 4 раза. Доступ http://www.xxx.com/my_app непосредственно через браузер.
Многие Netizens говорят, что ошибка может произойти на клиенте или системе, таких как антивирусное программное обеспечение, ненормальная сеть и т. Д. Напишите полученные данные в журнал каталогов, но разрешения журналов начинают быть «DRWXR-XR-X». «Позже модифицировал разрешения (CHMOD UGO + W log) -« DRWXRWXRWX ». Это нормально.
Как видно из этой ошибки, когда Apache не может обрабатывать HTTP-запрос, соответствующие данные не будут переданы в модуль расширения C ++, но вернуть ошибку (12152) на отправителя.