|
-
January 19th, 2010, 06:26 AM
#1
wininet through proxy
Hey guys. I have a small problem trying to use the wininet API through a proxy. I appreciate there's plenty of threads more or less on this subject already but none seemed particularly relevant.
Basically, I do get a 200 OK response but the actual html returned is (i think) just from the ISA server saying 'under construction'.
Another thing is, even if I remove the username and password i still get the same response. i'd expect a different response from the proxy if they were wrong but that's not happening.
Code:
#include <stdio.h>
#include <string>
#include <windows.h>
#include <wininet.h>
HINTERNET g_hRoot;
HINTERNET g_hNetSession;
HINTERNET g_hHttpRequest;
DWORD g_dwError;
char g_buffer[512];
char g_headersbuffer[512];
int g_nBytesRead = 0;
char pszProxyUsername[] = "Username";
char pszProxyPassword[] = "Password";
int main(int argc, char* pszArgs[])
{
std::string HtmlResponse;
//get handle from internetopen()
g_hRoot = InternetOpen("test", INTERNET_OPEN_TYPE_PROXY, "http://proxy", "8080", 0);
if(g_hRoot == NULL)
printf("InternetOpen() returned NULL\n");
//connect to our opened handle
g_hNetSession = InternetConnect(g_hRoot, "www.google.co.uk", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
if(g_hNetSession == NULL)
printf("InternetConnect() returned NULL\n");
if(!InternetSetOption(g_hNetSession, INTERNET_OPTION_PROXY_USERNAME, (LPVOID)pszProxyUsername, strlen(pszProxyUsername)))
{
g_dwError = GetLastError();
printf("internetsetoption() failed: %i\n", (int)g_dwError);
}
if(!InternetSetOption(g_hNetSession, INTERNET_OPTION_PROXY_PASSWORD, (LPVOID)pszProxyPassword, strlen(pszProxyPassword)))
{
g_dwError = GetLastError();
printf("internetsetoption() failed: %i\n", (int)g_dwError);
}
//open our http request
g_hHttpRequest = HttpOpenRequest(g_hNetSession, "GET", "", "HTTP/1.1", "", NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
if(g_hHttpRequest == NULL)
printf("HttpOpenRequest() returned NULL\n");
if(!HttpSendRequest(g_hHttpRequest, NULL, 0, NULL, 0))
{
g_dwError = GetLastError();
printf("HttpSendRequest() failed\nError code %d\n", (int)g_dwError);
}
//have sent request now ready to read response
DWORD dwLength = (DWORD)sizeof(g_headersbuffer);
if(!HttpQueryInfo(g_hHttpRequest, HTTP_QUERY_RAW_HEADERS_CRLF, g_headersbuffer, &dwLength, NULL))
{
g_dwError = GetLastError();
printf("\nhttpqueryinfo() failed: %i\n", (int)g_dwError);
}
InternetReadFile(g_hHttpRequest, g_buffer, sizeof(g_buffer), (DWORD*)&g_nBytesRead);
while(g_nBytesRead > 0)
{
HtmlResponse.append(g_buffer, g_nBytesRead);
InternetReadFile(g_hHttpRequest, g_buffer, sizeof(g_buffer), (DWORD*)&g_nBytesRead);
}
printf("%s\n", HtmlResponse.c_str());
printf("\n%s\n", g_headersbuffer);
//all done, cleanup
InternetCloseHandle(g_hRoot);
InternetCloseHandle(g_hNetSession);
InternetCloseHandle(g_hHttpRequest);
return 0;
}
Sorry for the lengthy post, by the way this is compiled with mingw. No errors are thrown up but it just ain't giving the expected results.... any suggestions anyone?
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
|