您根本没有发送.txt 文件。您正在发送一个硬编码字符串"Codex Anti-Hack"。
要发送实际的.txt 文件,您可以:
- 动态分配整个 MIME 数据缓冲区,填充它,然后将其传递给
HttpSendRequest()。在运行时查询文件大小以了解分配缓冲区的大小。例如:
#include <vector>
#include <memory>
#include <algorithm>
#include <type_traits>
struct HINTERNET_deleter
{
using pointer = HINTERNET;
// in VC2010: use this instead:
// typedef HINTERNET pointer;
void operator()(HINTERNET hInternet) const { InternetCloseHandle(hInternet); }
};
using HINTERNET_ptr = std::unique_ptr<std::remove_pointer<HINTERNET>::type, HINTERNET_deleter>;
// in VC2010: use this instead:
// typedef std::unique_ptr<std::remove_pointer<HINTERNET>::type, HINTERNET_deleter> HINTERNET_ptr;
struct HFILE_deleter
{
using pointer = HANDLE;
// in VS2010, use this instead:
// typedef HANDLE pointer;
void operator()(HANDLE hFile) const { if (hFile != INVALID_HANDLE_VALUE) CloseHandle(hFile); }
};
using HFILE_ptr = std::unique_ptr<std::remove_pointer<HANDLE>::type, HFILE_deleter>;
// in VS2010, use this instead:
// typedef std::unique_ptr<std::remove_pointer<HANDLE>::type, HFILE_deleter> HFILE_ptr;
bool PHP_Autentication()
{
static char frmdata_1[] = "-----------------------------og94kfkldjs7ekk\r\n"
"Content-Disposition: form-data; name=\"arquivo\"; filename=\"g.txt\"\r\n"
"Content-Type: text/plain\r\n"
"\r\n";
static DWORD frmdata_1_len = sizeof(frmdata_1) - 1;
static char frmdata_2[] = "\r\n"
"-----------------------------og94kfkldjs7ekk--\r\n";
static DWORD frmdata_2_len = sizeof(frmdata_2) - 1;
static TCHAR hdrs[] = "Content-Type: multipart/form-data; boundary=---------------------------og94kfkldjs7ekk";
static DWORD hdrs_len = (sizeof(hdrs) / sizeof(hdrs[0])) - 1;
HFILE_ptr hFile( CreateFile(_T("path\\filename.txt"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL) );
if (hFile.get() == INVALID_HANDLE_VALUE)
{
// error handling...
return false;
}
DWORD dwFileSize = GetFileSize(hFile.get(), NULL);
if (dwFileSize == INVALID_FILE_SIZE)
{
// error handling...
return false;
}
std::vector<char> frmdata(frmdata_1_len + dwFileSize + frmdata_2_len);
std::copy_n(frmdata_1, frmdata_1_len, &frmdata[0]);
DWORD dwOffset = frmdata_1_len;
while (dwFileSize > 0)
{
DWORD dwNumRead;
if ((!ReadFile(hFile.get(), &frmdata[dwOffset], dwFileSize, &dwNumRead, NULL)) || (dNumRead == 0))
{
// error handling...
return false;
}
dwOffset += dwNumRead;
dwFileSize -= dwNumRead;
}
std::copy_n(frmdata_2, frmdata_2_len, &frmdata[dwOffset]);
HINTERNET_ptr hSession( InternetOpen(_T("MyBrowser"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0) );
if (!hSession)
{
// error handling...
return false;
}
HINTERNET_ptr hConnect( InternetConnect(hSession.get(), carrega.IP_Server_and_Hard, INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1) );
if (!hConnect)
{
// error handling...
return false;
}
LPCTSTR rgpszAcceptTypes[] = {_T("*/*"), NULL};
HINTERNET_ptr hRequest( HttpOpenRequest(hConnect.get(), _T("POST"), _T("sentinela/sentinela.php"), NULL, NULL, rgpszAcceptTypes, 0, 1) );
if (!hRequest)
{
// error handling...
return false;
}
if (!HttpSendRequest(hRequest.get(), hdrs, hdrs_len, frmdata.data(), frmdata.size()))
{
// error handling...
return false;
}
DWORD dwStatusCode, dwIndex = 0;
if (!HttpQueryInfo(hRequest.get(), HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwStatusCode, sizeof(dwStatusCode), &dwIndex))
{
// error handling...
return false;
}
TCHAR buffer[2048] = {};
DWORD bufferSize = sizeof(buffer);
dwIndex = 0;
if (!HttpQueryInfo(hRequest.get(), HTTP_QUERY_RAW_HEADERS_CRLF, buffer, &bufferSize, &dwIndex))
{
// error handling...
return false;
}
#ifdef UNICODE
std::ostream &t_cout = std::wcout;
#else
std::ostream &t_cout = std::cout;
#endif
t_cout.write(buffer, bufferSize / sizeof(TCHAR));
t_cout << std::endl;
return ((dwStatusCode / 100) == 2);
}
#include <vector>
#include <memory>
#include <algorithm>
#include <type_traits>
struct HINTERNET_deleter
{
using pointer = HINTERNET;
// in VC2010: use this instead:
// typedef HINTERNET pointer;
void operator()(HINTERNET hInternet) const { InternetCloseHandle(hInternet); }
};
using HINTERNET_ptr = std::unique_ptr<std::remove_pointer<HINTERNET>::type, HINTERNET_deleter>;
// in VC2010: use this instead:
// typedef std::unique_ptr<std::remove_pointer<HINTERNET>::type, HINTERNET_deleter> HINTERNET_ptr;
struct HFILE_deleter
{
using pointer = HANDLE;
// in VS2010, use this instead:
// typedef HANDLE pointer;
void operator()(HANDLE hFile) const { if (hFile != INVALID_HANDLE_VALUE) CloseHandle(hFile); }
};
using HFILE_ptr = std::unique_ptr<std::remove_pointer<HANDLE>::type, HFILE_deleter>;
// in VS2010, use this instead:
// typedef std::unique_ptr<std::remove_pointer<HANDLE>::type, HFILE_deleter> HFILE_ptr;
bool WriteToInet(HINTERNET hRequest, LPCVOID buffer, DWORD size)
{
LPCBYTE ptr = (LPCBYTE) buffer;
DWORD dwNumWritten;
while (size > 0)
{
if (!InternetWriteFile(hRequest, ptr, size, &dwNumWritten))
return false;
ptr += dwNumWritten;
size -= dwNumWritten;
}
return true;
}
bool PHP_Autentication()
{
static char frmdata_1[] = "-----------------------------og94kfkldjs7ekk\r\n"
"Content-Disposition: form-data; name=\"arquivo\"; filename=\"g.txt\"\r\n"
"Content-Type: text/plain\r\n"
"\r\n";
static DWORD frmdata_1_len = sizeof(frmdata_1)-1;
static char frmdata_2[] = "\r\n"
"-----------------------------og94kfkldjs7ekk--\r\n";
static DWORD frmdata_2_len = sizeof(frmdata_2)-1;
static TCHAR hdrs[] = "Content-Type: multipart/form-data; boundary=---------------------------og94kfkldjs7ekk";
static DWORD hdrs_len = (sizeof(hdrs) / sizeof(hdrs[0])) - 1;
HFILE_ptr hFile( CreateFile(_T("path\\filename.txt"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL) );
if (hFile.get() == INVALID_HANDLE_VALUE)
{
// error handling...
return false;
}
DWORD dwFileSize = GetFileSize(hFile.get(), NULL);
if (dwFileSize == INVALID_FILE_SIZE)
{
// error handling...
return false;
}
HINTERNET_ptr hSession( InternetOpen(_T("MyBrowser"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0) );
if (!hSession)
{
// error handling...
return false;
}
HINTERNET_ptr hConnect( InternetConnect(hSession.get(), carrega.IP_Server_and_Hard, INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1) );
if (!hConnect)
{
// error handling...
return false;
}
LPCTSTR rgpszAcceptTypes[] = {_T("*/*"), NULL};
HINTERNET_ptr hRequest( HttpOpenRequest(hConnect.get(), _T("POST"), _T("sentinela/sentinela.php"), NULL, NULL, rgpszAcceptTypes, INTERNET_FLAG_NO_CACHE_WRITE, 1) );
if (!hRequest)
{
// error handling...
return false;
}
INTERNET_BUFFERS buf;
ZeroMemory(&buf, sizeof(buf));
buf.dwStructSize = sizeof(buf);
buf.lpcszHeader = hdrs;
buf.dwHeadersLength = hdrs_len;
buf.dwHeadersTotal = hdrs_len;
buf.lpvBuffer = NULL;
buf.dwBufferLength = 0;
buf.dwBufferTotal = frmdata_1_len + dwFileSize + frmdata_2_len;
buf.dwOffsetLow = 0;
buf.dwOffsetHigh = 0;
if (!HttpSendRequestEx(hRequest.get(), &buf, NULL, 0, 1))
{
// error handling...
return false;
}
if (!WriteToInet(hRequest.get(), frmdata_1, frmdata_1_len))
{
// error handling...
return false;
}
BYTE buffer[2048];
while (dwFileSize > 0)
{
DWORD dwNumRead;
if ((!ReadFile(hFile.get(), buffer, sizeof(buffer), &dwNumRead, NULL)) || (dwNumRead == 0))
{
// error handling...
return false;
}
if (!WriteToInet(hRequest.get(), buffer, dwNumRead))
{
// error handling...
return false;
}
dwFileSize -= dwNumRead;
}
if (!WriteToInet(hRequest.get(), frmdata_2, frmdata_2_len))
{
// error handling...
return false;
}
if (!HttpEndRequest(hRequest.get(), NULL, 0, 0))
{
// error handling...
return false;
}
DWORD dwStatusCode, dwIndex = 0;
if (!HttpQueryInfo(hRequest.get(), HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwStatusCode, sizeof(dwStatusCode), &dwIndex))
{
// error handling...
return false;
}
TCHAR buffer[2048] = {};
DWORD bufferSize = sizeof(buffer);
dwIndex = 0;
if (!HttpQueryInfo(hRequest.get(), HTTP_QUERY_RAW_HEADERS_CRLF, buffer, &bufferSize, &dwIndex))
{
// error handling...
return false;
}
#ifdef UNICODE
std::ostream &t_cout = std::wcout;
#else
std::ostream &t_cout = std::cout;
#endif
t_cout.write(buffer, bufferSize / sizeof(TCHAR));
t_cout << std::endl;
return ((dwStatusCode / 100) == 2);
}