PdbLib/UpLoader/HTTP/http_common.h
2025-06-05 10:51:52 +08:00

149 lines
3.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <string>
#include <string>
#include <Windows.h>
using std::wstring;
using std::string;
#pragma comment(lib,"WinHttp.lib")
inline void MyParseUrlW(LPCWSTR lpUrl, wstring& strHostName, wstring& strPage, WORD& sPort)
{
sPort = 80;
wstring strTemp(lpUrl);
int nPos = strTemp.find(L"http://");
if (wstring::npos != nPos)
strTemp = strTemp.substr(nPos + 7, strTemp.size() - nPos - 7);
else
{
nPos = strTemp.find(L"https://");
if (wstring::npos != nPos)
{
sPort = 443;//INTERNET_DEFAULT_HTTPS_PORT;
strTemp = strTemp.substr(nPos + 8, strTemp.size() - nPos - 8);
}
}
nPos = strTemp.find('/');
if (wstring::npos == nPos)//ûÓÐÕÒµ½ /
strHostName = strTemp;
else
strHostName = strTemp.substr(0, nPos);
int nPos1 = strHostName.find(':');
if (nPos1 != wstring::npos)
{
wstring strPort = strTemp.substr(nPos1 + 1, strHostName.size() - nPos1 - 1);
strHostName = strHostName.substr(0, nPos1);
sPort = (WORD)_wtoi(strPort.c_str());
}
if (wstring::npos == nPos) {
strPage = '/';
return;
}
strPage = strTemp.substr(nPos, strTemp.size() - nPos);
}
inline void MyParseUrlA(LPCSTR lpUrl, string& strHostName, string& strPage, WORD& sPort)
{
sPort = 80;
string strTemp(lpUrl);
int nPos = strTemp.find("http://");
if (string::npos != nPos)
strTemp = strTemp.substr(nPos + 7, strTemp.size() - nPos - 7);
else
{
nPos = strTemp.find("https://");
if (wstring::npos != nPos)
{
sPort = 443;//INTERNET_DEFAULT_HTTPS_PORT;
strTemp = strTemp.substr(nPos + 8, strTemp.size() - nPos - 8);
}
}
nPos = strTemp.find('/');
if (string::npos == nPos)//ûÓÐÕÒµ½ /
strHostName = strTemp;
else
strHostName = strTemp.substr(0, nPos);
int nPos1 = strHostName.find(':');
if (nPos1 != string::npos)
{
string strPort = strTemp.substr(nPos1 + 1, strHostName.size() - nPos1 - 1);
strHostName = strHostName.substr(0, nPos1);
sPort = (WORD)atoi(strPort.c_str());
}
if (string::npos == nPos) {
strPage = '/';
return;
}
strPage = strTemp.substr(nPos, strTemp.size() - nPos);
}
inline wstring Utf2U(const string& strUtf8)
{
wstring wstrRet(L"");
int nLen = MultiByteToWideChar(CP_UTF8, 0, strUtf8.c_str(), -1, NULL, 0);
if (nLen == ERROR_NO_UNICODE_TRANSLATION)
throw "Utf8ToUnicode³ö´í£ºÎÞЧµÄUTF-8×Ö·û´®¡£";
wstrRet.resize(nLen + 1, '\0');
MultiByteToWideChar(CP_UTF8, 0, strUtf8.c_str(), -1, (LPWSTR)wstrRet.c_str(), nLen);
return wstrRet;
}
inline string U2A(const wstring& str)
{
string strDes = "";
if (str.empty())
return "";
int nLen = ::WideCharToMultiByte(CP_ACP, 0, str.c_str(), str.size(), NULL, 0, NULL, NULL);
if (0 == nLen)
return "";
char* pBuffer = new char[nLen + 1];
memset(pBuffer, 0, nLen + 1);
::WideCharToMultiByte(CP_ACP, 0, str.c_str(), str.size(), pBuffer, nLen, NULL, NULL);
pBuffer[nLen] = '\0';
strDes.append(pBuffer);
delete[] pBuffer;
return strDes;
}
inline wstring A2U(const string& str)
{
wstring strDes;
if (str.empty())
return L"";
int nLen = ::MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0);
if (0 == nLen)
return L"";
wchar_t* pBuffer = new wchar_t[nLen + 1];
memset(pBuffer, 0, nLen + 1);
::MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), pBuffer, nLen);
pBuffer[nLen] = '\0';
strDes.append(pBuffer);
delete[] pBuffer;
return strDes;
}
inline bool FileExistA(LPCSTR lpFile)
{
HANDLE hFile = CreateFileA(lpFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
return false;
CloseHandle(hFile);
return true;
}
inline bool FileExistW(LPCWSTR lpFile)
{
HANDLE hFile = CreateFileW(lpFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
return false;
CloseHandle(hFile);
return true;
}
inline bool isEmptyString(LPCSTR lpStr)
{
if (NULL == lpStr || strlen(lpStr) == 0) {
return true;
}
return false;
}