因为用c++访问http的操作有很多,但是,用socket访问太麻烦,直接用微软的api又没有那么大的自由度。所以自己写了一个。
能很方便的实现ccookie管理,get,post操作。支持代理访问,图片下载。
下面是c++ http类的头文件:
#pragma once
class CHttp
{
public:
CHttp( void);
~CHttp( void);
virtual bool put(CString inbuff,CString *outbuff,CString type);
virtual bool get(CString url,CString *result);
virtual bool get(CString ip,CString port,CString url,CString *result);
virtual bool post(CString url, CString pstr, CString* result);
virtual bool post(CString ip,CString port,CString url,CString pstr, CString *result);
virtual bool getimage(CString url,CString path);
virtual bool m_connect(unsigned long ip,CString port);
virtual void BulidCookie(CString urlsc);
virtual CString fakeip( void);
CString cookie;
CString pryIp;
CString pryPort;
CString referer;
protected:
DWORD dwTimeOut;
SOCKET MySocket;
bool m_bConnect;
CString host;
CString nfakeip;
int m_nContent;
bool chunked;
public:
virtual int Init( void);
virtual int UInit( void);
};
class CHttp
{
public:
CHttp( void);
~CHttp( void);
virtual bool put(CString inbuff,CString *outbuff,CString type);
virtual bool get(CString url,CString *result);
virtual bool get(CString ip,CString port,CString url,CString *result);
virtual bool post(CString url, CString pstr, CString* result);
virtual bool post(CString ip,CString port,CString url,CString pstr, CString *result);
virtual bool getimage(CString url,CString path);
virtual bool m_connect(unsigned long ip,CString port);
virtual void BulidCookie(CString urlsc);
virtual CString fakeip( void);
CString cookie;
CString pryIp;
CString pryPort;
CString referer;
protected:
DWORD dwTimeOut;
SOCKET MySocket;
bool m_bConnect;
CString host;
CString nfakeip;
int m_nContent;
bool chunked;
public:
virtual int Init( void);
virtual int UInit( void);
};
使用实例:
1.get网页资源:
(1)将类文件加入工程,并包含头文件
#include "http.h"
(2)添加一个变量 urls,存储返回的http源码
CString urls;
CHttp http; // 实例化类
http.Init(); // 初始化(添加socket库支持)
http. get( " http://www.it900.net/ ",&urls);
CHttp http; // 实例化类
http.Init(); // 初始化(添加socket库支持)
http. get( " http://www.it900.net/ ",&urls);
好了,四句代码就把www.it900.net的主页http源码下载出来了,是不是很方便。
2.post方法:
添加头文件,新建类,初始化就不说了,根据post函数接口新建一个要post的CString;
比如要发送这个变量:
CString pram=“urername=
11&password=
22&button=login”;
http.post( " http://www.it900.net ",pram,&urls);
http.post( " http://www.it900.net ",pram,&urls);
这样就把pram的内容post到了网页了。
3.代理支持。
如果要使用192.168.1.1:80这个代理
则直接:
http.
get(
"
192.168.1.1
",
"
80
",
"
http://www.it900.net/
",&urls);
非常的方便简洁。
如果有什么问题,直接在本blog留言就行,只是自己用,可能有不完善的地方望见谅,用这个类写过很多程序了,都好像没出什么问题,有更好的建议请联系我。
类文件下载地址:http://www.xiaoqin.in/index.php?a=details&aid=88