-
June 11th, 2009, 02:47 AM
#1
WinInet Question
Hello All. Can anyone of you tell me why this piece of code doesn't work? the call to HttpOpenRequest() returns an 87 error code which is an invalid parameter ( returned by GetLastError() ) and i don't know what's causing it. please help.. thank you in advance.
Code:
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#include <wininet.h>
#include <strsafe.h>
#pragma comment (lib, "wininet.lib")
void ErrorExit(LPTSTR lpszFunction)
{
// Retrieve the system error message for the last-error code
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
// Display the error message and exit the process
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
(lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR));
StringCchPrintf((LPTSTR)lpDisplayBuf,
LocalSize(lpDisplayBuf) / sizeof(TCHAR),
TEXT("%s failed with error %d: %s"),
lpszFunction, dw, lpMsgBuf);
MessageBox(NULL, (LPCWSTR)lpDisplayBuf, TEXT("Error"), MB_OK);
LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
ExitProcess(dw);
}
int Dumper(HINTERNET hResource)
{
LPTSTR lpszData; // buffer for the data
DWORD dwSize; // size of the data available
DWORD dwDownloaded; // size of the downloaded data
DWORD dwSizeSum=0; // size of the data in the textbox
LPTSTR lpszHolding; // buffer to merge the textbox data and buffer
LPTSTR textbox;
size_t size;
// This loop handles reading the data.
do
{
// The call to InternetQueryDataAvailable determines the
// amount of data available to download.
if (!InternetQueryDataAvailable(hResource,&dwSize,0,0))
{
printf("InternetQueryDataAvailable Error\n");
return FALSE;
}
else
{
// Allocate a buffer of the size returned by
// InternetQueryDataAvailable.
lpszData = new TCHAR[dwSize+1];
// Read the data from the HINTERNET handle.
if(!InternetReadFile(hResource,
(LPVOID)lpszData,
dwSize,
&dwDownloaded))
{
printf("InternetReadFile\n");
delete[] lpszData;
break;
}
else
{
// Add a null terminator to the end of the data buffer
lpszData[dwDownloaded]='\0';
// Allocate the holding buffer.
lpszHolding = new TCHAR[dwSizeSum + dwDownloaded + 1];
// Check if there has been any data written
// to the textbox.
if (dwSizeSum != 0)
{
lpszHolding = textbox;
// Add a null terminator at the end of the
// textbox data.
lpszHolding[dwSizeSum]='\0';
}
else
{
// Make the holding buffer an empty string.
lpszHolding[0]='\0';
}
size_t cchDest = dwSizeSum + dwDownloaded +
dwDownloaded + 1;
LPTSTR* ppszDestEnd;
size_t* pcchRemaining;
// Add the new data to the holding buffer
HRESULT hr = StringCchCatEx(lpszHolding,
cchDest,
lpszData,
ppszDestEnd,
pcchRemaining,
STRSAFE_NO_TRUNCATION);
if(SUCCEEDED(hr))
{
// Write the holding buffer to the textbox.
StringCchLength(lpszHolding,STRSAFE_MAX_CCH, &size );
StringCchCopy(textbox, size, lpszHolding );
// Delete the two buffers.
delete[] lpszHolding;
delete[] lpszData;
// Add the size of the downloaded data to the
// textbox data size.
dwSizeSum = dwSizeSum + dwDownloaded + 1;
// Check the size of the remaining data.
// If it is zero, break.
if (dwDownloaded == 0)
break;
}
else
{
// TODO: Insert error handling code here.
}
}
}
}while(TRUE);
// Close the HINTERNET handle.
InternetCloseHandle(hResource);
printf("%s",textbox);
// Return
return TRUE;
}
int _tmain(int argc, _TCHAR* argv[])
{
HINTERNET hOpen;
HINTERNET hConnect;
HINTERNET hRequest;
LPCWSTR ax = (LPCWSTR)"/index.php";
LPCWSTR bx = (LPCWSTR)"";
LPCWSTR httpVerb = (LPCWSTR)"GET" ;
const char* lplpszAcceptTypes[] = {"text/*", NULL};
hOpen = InternetOpen((LPCTSTR)"KimHttpGet",
INTERNET_OPEN_TYPE_DIRECT,
NULL,
NULL,
0 );
if ( NULL != hOpen )
{
hConnect = InternetConnect( hOpen,
(LPCWSTR)"www",
INTERNET_DEFAULT_HTTP_PORT,
NULL,
NULL,
INTERNET_SERVICE_HTTP,
0,
0 );
if ( NULL != hConnect )
{
hRequest = HttpOpenRequest( hConnect, //handle returned by InternetConnect
httpVerb, // POST or GET
ax, // file/object to get
HTTP_VERSION, // http version
NULL, //
(LPCWSTR*)lplpszAcceptTypes, //
INTERNET_FLAG_DONT_CACHE, // flags
1);
if ( NULL != hRequest )
{
if ( !HttpSendRequest( hRequest, NULL,0, NULL,0 ) )
{
Dumper(hRequest);
}
else
{
printf("HttpSendRequest Error\n");
ErrorExit((LPTSTR)"HttpSendRequest");
}
}
else
{
printf("HttpOpenRequest Error\n");
ErrorExit((LPTSTR)"HttpOpenRequest");
}
}
else
{
printf("InternetConnect Error\n");
ErrorExit((LPTSTR)"InternetConnect");
}
}
else
{
printf("InternetOpen Error\n");
ErrorExit((LPTSTR)"InternetOpen");
}
return 0;
}
-
June 17th, 2009, 03:51 PM
#2
Re: WinInet Question
Originally Posted by klambiguit
Hello All. Can anyone of you tell me why this piece of code doesn't work?
Hi klambiguit,
You need to replace:
Code:
HINTERNET hOpen;
HINTERNET hConnect;
HINTERNET hRequest;
LPCWSTR ax = (LPCWSTR)"/index.php";
LPCWSTR bx = (LPCWSTR)"";
LPCWSTR httpVerb = (LPCWSTR)"GET" ;
With
Code:
HINTERNET hOpen = NULL;
HINTERNET hConnect = NULL;
HINTERNET hRequest = NULL;
LPCWSTR ax = L"/index.php";
LPCWSTR bx = L"";
LPCWSTR httpVerb = L"GET" ;
And
Code:
LPTSTR* ppszDestEnd;
size_t* pcchRemaining;
LPTSTR lpszData; // buffer for the data
LPTSTR lpszHolding; // buffer to merge the textbox data and buffer
LPTSTR textbox;
With
Code:
LPTSTR* ppszDestEnd = NULL;
size_t* pcchRemaining = NULL;
LPTSTR lpszData = NULL; // buffer for the data
LPTSTR lpszHolding = NULL; // buffer to merge the textbox data and buffer
LPTSTR textbox = NULL;
That should do it.
Regards
Doron Moraz
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|