连接有密码的Http代理不成功
连接有密码的代理不成功,出现下面的返回信息:
HTTP/1.0 403 Forbidden
Server: squid/2.6.STABLE20
Date: Sat, 02 Aug 2008 05:12:13 GMT
Content-Type: text/html
Content-Length: 1102
Expires: Sat, 02 Aug 2008 05:12:13 GMT
X-Squid-Error: ERR_ACCESS_DENIED 0
X-Cache: MISS from 210.45.240.8
X-Cache-LookUp NONE from 210.45.240.8:8080
Via: 1.0 210.45.240.8:8080(squid/2.6.STABLE20)
Proxy-Connection: close
连接的函数如下:
SOCKET CHttptestDlg::ConnectProxy(LPCSTR ProxyAddr ,UINT ProxyPort,BOOL bNeedAuth, const char * lpszUserName, const char * lpszPassword)
{
CString temp;
BOOL bReturn;
char tmpBuffer[1024+1]={0};
CString DownLoadAddress="http://www.hoobe.com/upLoad/movie/";
CString hostFile="tmm.rar";
SOCKET ProxySocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if (ProxySocket == INVALID_SOCKET)
{
AfxMessageBox("socket err");
return INVALID_SOCKET;
}
SocketAddr.sin_addr.s_addr = inet_addr (ProxyAddr);
SocketAddr.sin_family=AF_INET;
SocketAddr.sin_port=htons(ProxyPort);
struct fd_set fdSet;
struct timeval tmvTimeout={0L,0L};
FD_ZERO(&fdSet);
FD_SET(ProxySocket, &fdSet);
if (select(0,&fdSet,NULL,NULL,&tmvTimeout)==SOCKET_ERROR)
{
closesocket(ProxySocket);
AfxMessageBox("Error when select.");
return INVALID_SOCKET;
}
if (connect(ProxySocket, (const struct sockaddr *)&SocketAddr, sizeof(SocketAddr))==SOCKET_ERROR)
{
closesocket(ProxySocket);
AfxMessageBox("代理连接失败connect");
return INVALID_SOCKET;
}
char szAuth[1024 + 1] = { " "};
char szAuthT[1024 + 1] = { " "};
char szBuffer[1024 + 1] = { " "};
if (bNeedAuth)
{
sprintf(szAuthT, "%s:%s", lpszUserName, lpszPassword);
to64frombits((UCHAR *)szAuth, (UCHAR *)szAuthT, strlen(szAuthT));
sprintf(szBuffer, "CONNECT %s:%d HTTP/1.0\r\nProxy-Authorization: Basic %s\r\n\r\n", ProxyAddr, ProxyPort,szAuth);
}else{
sprintf(szBuffer, "CONNECT %s:%d HTTP/1.0\r\n\r\n", ProxyAddr, ProxyPort);
}
if(!SocketSend(ProxySocket,szBuffer))
{
closesocket(ProxySocket);
AfxMessageBox("代理连接失败");
return INVALID_SOCKET;
}
GetHttpHeader(ProxySocket,tmpBuffer);
temp=tmpBuffer;
if(temp.Find("HTTP/1.0 200 Connection established",0)==-1)
{
AfxMessageBox(temp);
closesocket(ProxySocket);
AfxMessageBox("代理连接失败");
return INVALID_SOCKET;
}else{
AfxMessageBox("代理连接完成");
return ProxySocket;
}
return ProxySocket;
}
请高手出手相救!