"HTTP/1.1 502 Proxy Error ( The specified Secure Sockets Layer (SSL) port is not allowed. ISA Server is not configured to allow SSL requests from this port. Most Web browsers use port 443 for SSL requests.  )
Via: 1.1 PROXY3
Connection: close
Proxy-Connection: close
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html
Content-Length: 703   "int GetFileLength(char *httpHeader)
{
CString strHeader;
int local;
strHeader=(CString)httpHeader;
local=strHeader.Find("Content-Length",0);
local+=16;
strHeader.Delete(0,local);
local=strHeader.Find("\r");
strHeader.SetAt(local,'\0'); char temp[30];
strcpy(temp,strHeader.GetBuffer(strHeader.GetLength()));
return atoi(temp);
}int GetHttpHeader(SOCKET sckDest,char *str)
{
BOOL m_bResponsed=0;
int m_nResponseHeaderSize; if(!m_bResponsed)
{
char c = 0;
int nIndex = 0;
BOOL bEndResponse = FALSE;
while(!bEndResponse && nIndex < 1024)
{
recv(sckDest,&c,1,0);
str[nIndex++] = c;
if(nIndex >= 4)
{
if(str[nIndex - 4] == '\r' && str[nIndex - 3] == '\n'
&& str[nIndex - 2] == '\r' && str[nIndex - 1] == '\n')
bEndResponse = TRUE;
}
}
m_nResponseHeaderSize = nIndex;
m_bResponsed = TRUE;
} return  m_nResponseHeaderSize;}//发送
void szcopy(char* dest,const char* src,int nMaxBytes)
{
int i_cntr=0;
while ((src[i_cntr]!='\0') || (i_cntr<nMaxBytes))
dest[i_cntr]=src[i_cntr++];
dest[i_cntr]='\0';
}BOOL SocketSend(SOCKET sckDest,const char* szHttp)
{ char szSendHeader[1024];
int iLen=strlen(szHttp);
szcopy(szSendHeader,szHttp,iLen);
if(send (sckDest  ,(const char FAR *)szSendHeader ,iLen ,0)==SOCKET_ERROR)
{
closesocket(sckDest);
AfxMessageBox("Error when send");
return FALSE;
} return TRUE;
}BOOL SocketSend(SOCKET sckDest,CString szHttp)
{ int iLen=szHttp.GetLength();
if(send (sckDest,szHttp,iLen,0)==SOCKET_ERROR)
{
closesocket(sckDest);
AfxMessageBox("Error when send");
return FALSE;
} return TRUE;
}SOCKET                               HTTPSocket;   // 主socket
struct sockaddr_in                   SocketAddr;   // address socket
struct sockaddr_in                   BindSocket;   // for bind
CString strHost="111.111.111.111 ";
CString DownLoadAddress="http://www.aitenshi.com/bbs/images/";
CString hostFile="logo.gif";
int HttpPort=80;void CSocket_ClientDlg::OnBnClickedButton3()
{
HTTPSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SocketAddr.sin_addr.s_addr = inet_addr("128.1.0.6");
SocketAddr.sin_family=AF_INET;
SocketAddr.sin_port=htons(80); struct fd_set fdSet;
struct timeval tmvTimeout={0L,0L}; FD_ZERO(&fdSet);
FD_SET(HTTPSocket, &fdSet);  if (select(0,&fdSet,NULL,NULL,&tmvTimeout)==SOCKET_ERROR)
{
closesocket(HTTPSocket);
AfxMessageBox("Error when select.");
return;
}
if (connect(HTTPSocket, (const struct sockaddr *)&SocketAddr, sizeof(SocketAddr))==SOCKET_ERROR)
{
int nItem = m_ListCtrl.GetItemCount();
m_ListCtrl.InsertItem(nItem, _T("连接代理失败"));
return;
}
//  发送CONNCET请求令到代理服务器,用于和代理建立连接 //代理服务器的地址和端口放在m_ProxyAddr,m_Port 里面 CString temp;
char tmpBuffer[1024];
memset(tmpBuffer, 0, 1024);
CString m_ProxyAddr = "www.baidu.com";
CString  m_Port      = "80";
temp.Format("CONNECT %s:%s HTTP/1.1\r\nUser-Agent: MyApp/0.1\r\n\r\n",m_ProxyAddr,m_Port);
if(!SocketSend(HTTPSocket,temp))
{
int nItem = m_ListCtrl.GetItemCount();
m_ListCtrl.InsertItem(nItem, _T("连接代理失败"));
return;
} // 取得代理响应,如果连接代理成功,代理服务器将返回200 Connection established GetHttpHeader(HTTPSocket,tmpBuffer);
temp=tmpBuffer;
if(temp.Find("HTTP/1.0 200 Connection established",0)==-1)
{
int nItem = m_ListCtrl.GetItemCount();
m_ListCtrl.InsertItem(nItem, _T("连接代理失败"));
return;
} int nItem = m_ListCtrl.GetItemCount();
m_ListCtrl.InsertItem(nItem, _T("连接代理完成"));
return;   // ----------〉}
最后GetHttpHeader(HTTPSocket,tmpBuffer);
后,提示连接失败,因为收到上面描述的结果,请问如何来解决呢?谢谢。

解决方案 »

  1.   

    不用解决啦,不是你程序的问题,而是你连接的代理网关不支持CONNECT方式到80端口,仅支持443端口如果正常情况返回HTTP/1.0 200 Connection established,你这里的错误信息很明显连接80不行,并非所有HTTP代理都支持CONNECT方式连接任意端口的。你这种情况如果需要连接80,需要搞二级代理
      

  2.   

    我现在将端口改成443, 出现了另外一个问题:
    出现HTTP/1.1 407 Proxy Authentication Required 
    请问这个地方,是需要自己写代码来进行验证么?有没有封装好的东西可以来用呢?谢谢
      

  3.   

    端口443是给https使用的,自己验证,很麻烦的。
      

  4.   

    应该用对象XMLHTTP或者HttpWebRequest,自己写验证或者HTTPS,基本不可能