Http proxy,帮我看看是怎么回事呀
xdljf 2004-07-26 10:11:23 Proxy Server返回给我的信息:
HTTP/1.1 407 Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy service is denied. )
Via:1.1 PROXY3
Proxy-Authenticate: NTLM
Proxy-Authenticate: Kerberos
Proxy-Authenticate: Negotiate
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html
Content-Length: 3767
能不能帮我看看是怎么回事
我的部分源代码
// Use inet_addr() to determine if we're dealing with a name or an address
IN_ADDR iaProxy;
LPHOSTENT lpProxyEntry;
iaProxy.s_addr = inet_addr(lpszProxyAddress);
if (iaProxy.s_addr == INADDR_NONE)
{
// Wasn't an IP address string, assume it is a name
lpProxyEntry = gethostbyname(lpszProxyAddress);
}
else
{
// It was a valid IP address string
lpProxyEntry = gethostbyaddr((const char *)&iaProxy,
sizeof(struct in_addr), AF_INET);
}
if (lpProxyEntry == NULL)
{
printf("gethostbyname()");
return 0;
}
// Fill in the rest of the proxy address structure
SOCKADDR_IN saProxy;
saProxy.sin_port = htons(nProxyPort);
saProxy.sin_family = AF_INET;
saProxy.sin_addr = *((LPIN_ADDR)*lpProxyEntry->h_addr_list);
// Create a TCP/IP stream socket
SOCKET sock;
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == INVALID_SOCKET)
{
printf("socket()");
return 0;
}
//connect to proxy
if(connect(sock, (LPSOCKADDR)&saProxy, sizeof(SOCKADDR_IN)))
{
return 0;
}
char szBuffer[4096];
int nLen;
if(stricmp(lpszProxyProtocol, "HTTPS") == 0 || stricmp(lpszProxyProtocol, "HTTP") == 0 )
{
if(bNeedAuth)
{
//Proxy-Authorization: Basic
char szAuth[1024 + 1] = {""};
char szAuthT[1024 + 1] = {""};
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", lpszDestHost, nDestPort, szAuth);
}
else
{
sprintf(szBuffer, "CONNECT %s:%d HTTP/1.0\r\n\r\n", lpszDestHost, nDestPort);
}
nLen = strlen(szBuffer);
send(sock, szBuffer, nLen, 0);
nLen = 4096;
recv(sock, szBuffer, nLen, 0);
printf("%s\n",szBuffer);
if(strnicmp(szBuffer, "HTTP/1.0 200", strlen("HTTP/1.0 200")) == 0 ||
strnicmp(szBuffer, "HTTP/1.1 200", strlen("HTTP/1.1 200")) == 0)
{
return 1;
}
return 0;
}