假设现在有两种代理IP
一种是HTTP代理 不用通过帐号密码 类似于:192.168.x.x:80
另外一种是SOCK5代理 需要通过帐号密码 类似于:192.168.x.x:80 帐号:user 密码:passd
请问MFC中 怎么分别对这两种代理IP进行有效性验证呢 附上我写的代码,部分代码是网上搬来的,这样没有效果 随便写的代理IP地址端口密码 都判断为有效的。不知道是哪里的问题
bool TestProxyData(LPCTSTR Proxy,LPCTSTR ProxyPassd)
{
CString data;
DWORD dwStatusCode;
CInternetSession session("HttpClient");
CHttpFile *pfile = NULL;
INTERNET_PROXY_INFO proxyinfo;
proxyinfo.dwAccessType = INTERNET_OPEN_TYPE_PROXY;
proxyinfo.lpszProxy = Proxy;
proxyinfo.lpszProxyBypass = ProxyPassd;
session.SetOption(INTERNET_OPTION_PROXY,(LPVOID)&proxyinfo,sizeof(INTERNET_PROXY_INFO));
session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 2000); // 2秒的连接超时
session.SetOption(INTERNET_OPTION_SEND_TIMEOUT, 1000); // 1秒的发送超时
session.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT, 7000); // 7秒的接收超时
session.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT, 1000); // 1秒的发送超时
session.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 7000); // 7秒的接收超时
session.SetOption(INTERNET_OPTION_CONNECT_RETRIES, 1); // 1次重试
try
{
pfile = (CHttpFile*)session.OpenURL("http://ip.dnsexit.com/", 1, INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_RELOAD|INTERNET_FLAG_DONT_CACHE);
}
catch (CInternetException *e)
{
pfile = NULL;
e->Delete();
session.Close();
return false;
}
pfile->QueryInfoStatusCode(dwStatusCode);
if(dwStatusCode == HTTP_STATUS_OK)
{
while (pfile->ReadString(data))
{
content += data;
}
pfile->Close();
session.Close();
return true;
}
else
{
return false;
}
}
typedef struct tagProxyIP{
int num;
CString ProxyIP;
CString IPtype;
int nPot;
CString IPUser;
CString IPpwd;
CString ISnormal;
}stcProxyIP;
CString buf,buf1,buf2="";
for (int i=0;i<g_vecIP.size();i++)
{
buf.Format("%d",g_vecIP[i].nPot);
if (g_vecIP[i].IPUser=="")
{
buf1=g_vecIP[i].ProxyIP+":"+buf;
}else if (g_vecIP[i].IPUser!="")
{
buf1=g_vecIP[i].ProxyIP+":"+buf;
buf2=g_vecIP[i].IPUser+":"+g_vecIP[i].IPpwd;
}
if (TestProxyData(buf1,buf2))
{
g_vecIP[i].ISnormal="有效";
}else
{
g_vecIP[i].ISnormal="无效";
}
}