浅谈http代理服务器的穿透(2)
来源:互联网 发布:人工智能行业分析报告 编辑:程序博客网 时间:2024/05/17 19:18
浅谈http代理服务器的穿透(2)
Author : Leen
思路就是先用套接字连接代理服务器,然后给代理服务器发送http请求,代理服务器向远程服务器转发请求
以下为一个通过HTTP代理服务器下载网页的小程序
主要代码如下:
void CMyGetHTTPFileDlg::OnBnClickedButtonGet()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
CString strIp ;
char szIp[32];
memset(szIp,0,32);
char szWebSite[128];
memset(szWebSite,0,128);
m_CtrlIpAddress.GetWindowText(strIp);
//Unicode 工程需要将宽字节转成多字节
WideCharToMultiByte(CP_ACP,0,strIp.GetBuffer(),-1,szIp,32,NULL,NULL);
WideCharToMultiByte(CP_ACP,0,m_StrWbeSite.GetBuffer(),-1,szWebSite,128,NULL,NULL);
m_local.sin_family=AF_INET;
m_local.sin_port=htons(m_iServerPort);
m_local.sin_addr.S_un.S_addr=inet_addr(szIp);
m_socket=socket(AF_INET,SOCK_STREAM,0);
int ret;
//联接代理服务器
ret=connect(m_socket,(LPSOCKADDR)&m_local,sizeof(m_local));
//有错的话
if(ret!=0)
{
int ierror = WSAGetLastError() ;
CString strerror ;
strerror.Format(_T("联接错误,错误代码:%d"),ierror);
AfxMessageBox( strerror );
closesocket(m_socket);
return ;// -1;
}
// AfxMessageBox( "连接服务器成功 ");
CFile m_file;
m_file.Open(_T("C:\\myhtml.htm"),CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
WORD wd = 0xfeff;
// m_file.Write(&wd,2);
char buff[1024];
//HTTP 1.1
sprintf(buff,"GET http://%s/ HTTP/1.1\
Host: %s\r\n\
Proxy-Connection: keep-alive\r\n\
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1\r\n\
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n\
Accept-Language: zh-CN,zh;q=0.8\r\n\
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3\r\n\r\n",szWebSite,szWebSite);
send(m_socket,buff,strlen(buff),0); //发送请求
memset(buff,0,1024);
recv(m_socket,buff,1024,0);
// recv(m_socket,buff,1024,0);
// recv(m_socket,buff,1024,0);
// recv(m_socket,buff,1024,0);
// recv(m_socket,buff,1024,0);
//返回代理的response消息
if(strstr(buff, "HTTP/1.")==NULL)
{
AfxMessageBox( _T("通过代理连接外网不成功! "));
closesocket(m_socket);
return ;// 0;
}
char* pchar = strstr(buff,"<html");
if(pchar != NULL)
m_file.Write(pchar,1024-(pchar - buff));
while(TRUE)
{
memset(buff,0,1024);
//接收完成后推出
if( 0 == recv(m_socket,buff,1024,0) )
break;
//去掉没用的字符,确保html脚本的正确
char* pchar = strstr(buff,"<html");
if(pchar != NULL)
m_file.Write(pchar,1024-(pchar - buff));
else
m_file.Write(buff,1024);
}
//关闭文件
m_file.Close();
}
程序比较简单,希望和大家多多交流!!!这篇文章我也贴在了 VC驿站
地址:http://www.cctry.com/thread-49887-1-1.html
- 浅谈http代理服务器的穿透(2)
- 浅谈http代理服务器的穿透
- 原生socket穿透HTTP代理服务器
- 浅谈代理服务器的作用
- 浅谈代理服务器的作用
- 浅谈代理服务器的作用
- 浅谈代理服务器的作用
- 浅谈代理服务器的作用
- HTTP代理服务器的实现
- 穿透代理服务器编程
- 穿透代理服务器编程
- 穿透代理服务器编程
- 穿透代理服务器编程
- 穿透代理服务器编程
- 穿透代理服务器编程
- java写的http代理服务器
- 打造自己的HTTP代理服务器
- 打造自己的HTTP代理服务器
- A*总结
- Linux下中断处理程序源码分析
- 程序员最需要什么 (一)-----温馨的家
- javascript读取文件
- LS中针对存取控制权限acl的相关操作和判读(一)
- 浅谈http代理服务器的穿透(2)
- android NDK 的进阶实验
- 指针与数组
- LS中针对存取控制权限acl的相关操作和判读(二)
- 不务正业
- 自旋锁的应用条件
- 我的烦恼
- 答复文档的判断和创建
- 外围系统通过数据中心与SAP做接口