假設現在有HTTP代理IP:192.168.1.1埠是80
SOCK5代理IP:192.168.1.2埠也是80 但是SOCK5有帳號密碼驗證 帳號:user 密碼:passd
請問下 怎么MFC里怎么對這兩個代理IP驗證是否有效呢? 附上我自己的部分代碼,是從網上搬過來的、測驗了下
代理IP地址埠密碼無論寫什么 都為有效 不知道問題出在哪里 求助!!
CString content;
bool TestProxyData(LPCTSTR Proxy,LPCTSTR ProxyPassd) //代理IP檢測函式
{
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;//代理IP地址
CString IPtype;//IP型別
int nPot;//代理埠
CString IPUser;//代理IP帳號
CString IPpwd;//代理IP密碼
CString ISnormal;//是否有效
}stcProxyIP;
//代理IP串列所用的結構
vector<stcProxyIP> g_vecIP; //用了個容器來保存代理IP
CString buf,buf1,buf2="";
for (int i=0;i<g_vecIP.size();i++) //回圈遍歷代理IP串列
{
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="無效";
}
}
uj5u.com熱心網友回復:
CInternetSession::CInternetSession 構造時就會呼叫 InternetOpen,因此試試在建構式時填好代理引數
CInternetSession session("HttpClient", 1, INTERNET_OPEN_TYPE_PROXY, XXXXXXXXX);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/92559.html
標籤:網絡編程
