通过代理服务器connect到远程网站的问题
下面这段代码我分别用好几种代理服务器软件进行测试,
但是又一种很常用的代理服务器软件 CCProxy 却没有办法 recv 到任何数据,
其它均可以recv 到 “200” ,请问我该如何处理?大家帮忙看看:
ProxyStatus ConnectByHttp(SOCKET socket, string ip, u_short port)
{
char buf[512];
if (m_proxyUserName != "")
{
string str;
string strBase64;
str = m_proxyUserName + ":" + m_proxyUserPwd; //代理服务器用户名和密码
strBase64 = CBase64::Encode((unsigned char*)str.c_str(), str.length());
sprintf(buf, "CONNECT %s:%d HTTP/1.1\r\nHost: %s:%d\r\nAuthorization: Basic %s\r\n\r\nProxy-Authorization: Basic %s\r\n\r\n",
ip.c_str(), port, ip.c_str(), port, strBase64.c_str(), strBase64.c_str());
}
else
{
sprintf(buf, "CONNECT %s:%d HTTP/1.1\r\nUser-Agent: MyApp/0.1\r\n\r\n", ip.c_str(), port);
}
Send(socket, buf, strlen(buf));
memset(buf,0,sizeof(buf));
Receive(socket, buf, sizeof(buf)); //这个地方没有获取到任何东西,buf 为空
if (strstr(buf, "200") != NULL)
{
return SUCCESS;
}
else
{
return CONNECT_SERVER_FAIL;
}
}
int Receive(SOCKET socket, char* buf, int bufLen)
{
return recv(socket, buf, bufLen, 0); //这个地方没有获取到任何东西,buf 为空
}
bool Send(SOCKET socket, const char* buf, int len)
{
long ilen = len;
int sendCnt = 0;
int ret;
while(sendCnt < ilen)
{
if((ret = send(socket, buf + sendCnt, ilen - sendCnt, 0)) == SOCKET_ERROR)
{
return false;
}
else
{
sendCnt += ret;
}
}
return true;
}
[解决办法]
跟踪啊,抓包啊。看报文
你本地转给CCproxy的时候看send成功没,再看CCproxy转到目标server没,再server给CCproxy回了没,最后就是CCProxy给你本地回了没。
这样不就知道了。
代码我看貌似没问题。