nginx下DZ静态规则

July 4th, 2010 No Comments »

uchome 在nginx下伪静态规则您可以这样写:
rewrite ^/(space|network)\-(.+)\.html$ /$1.php?rewrite=$2 last;
rewrite ^/(space|network)\.html$ /$1.php last;
rewrite ^/([0-9]+)$ /space.php?uid=$1 last;

supesite 在nginx下的伪静态规则您可以这样写:
rewrite ^/([0-9]+)/spacelist(.+)$ /index.php?uid/$1/action/spacelist/type$2 last;
rewrite ^/([0-9]+)/viewspace(.+)$ /index.php?uid/$1/action/viewspace/itemid$2 last;
rewrite ^/([0-9]+)/viewbbs(.+)$ /index.php?uid/$1/action/viewbbs/tid$2 last;
rewrite ^/([0-9]+)/(.*)$ /index.php?uid/$1/$2 last;
rewrite ^/([0-9]+)$ /index.php?uid/$1 last;
rewrite ^/action(.+)$ /index.php?action$1 last;
rewrite ^/category(.+)$ /index.php?action/category/catid$1 last;
rewrite ^/viewnews(.+)$ /index.php?action/viewnews/itemid$1 last;
rewrite ^/viewthread(.+)$ /index.php?action/viewthread/tid$1 last;
rewrite ^/mygroup(.+)$ /index.php?action/mygroup/gid$1 last;

DZ论坛

rewrite ^(.*)/archiver/((fid|tid)-[\w\-]+\.html)$ $1/archiver/index.php?$2 last;
rewrite ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&page=$3 last;
rewrite ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&extra=page%3D$4&page=$3 last;
rewrite ^(.*)/profile-(username|uid)-(.+)\.html$ $1/viewpro.php?$2=$3 last;
rewrite ^(.*)/space-(username|uid)-(.+)\.html$ $1/space.php?$2=$3 last;
rewrite ^(.*)/tag-(.+)\.html$ $1/tag.php?name=$2 last;
}

在虚拟机下装的centos中汉字乱码如何处理

July 2nd, 2010 No Comments »
有装中文字体没?没有的话装一个
yum install fonts-chinese
yum install  fonts-ISO8859-2-75dpi
安装后重启,即可

如果这样还乱码,那就要改一下配置文件了
修改/etc/sysconfig/i18n文件
为 LANG =”zh_CN.GB18030”或者LANG=“zh_CN.UTF-8”
注销重进即可

LNMP 如何安装

July 2nd, 2010 No Comments »

安装系统需求:需要1 GB硬盘剩余空间128M以上内存安装步骤:1、下载LNMP一键安装包:
可以选择使用下载版(推荐国外或者美国VPS使用)或者完整版(推荐国内VPS使用),如果使用下载版执行命令 wget -c http://soft.vpser.net/lnmp/lnmp0.4.tar.gz

如果使 用完整版,执行命令 wget -c http://soft.vpser.net/lnmp/lnmp0.4-full.tar.gz, 执行上述命令后LNMP一键安装包就会被下载到VPS上。
2、解压LNMP一键安装包:
执行tar zxvf lnmp0.4.tar.gz 或者tar zxvf lnmp0.4-full.tar.gz 就会将LNMP一键安装包解压缩。
3、CentOS下安装步骤
下载版执行命令 cd lnmp0.4/ ,完整版执行命令:cd lnmp0.4-full/然后再执行./centos.sh ,输入要绑定的域名,回车,再输入要设置的MySQL root的密码,再次回车确认。程序会自动安装编译Nginx、PHP、MySQL、phpMyAdmin、Zend这几个软件。
4、Debian/Ubuntu下安装步骤
下载版执行命令 cd lnmp0.4/ ,完整版执行命令:cd lnmp0.4-full/然后32位系统执行./debian.sh ,输入要绑定的域名,回车,再次输入VPS/服务器所在位置:asia、america、europe、oceania或africa,回车,再输入要设 置的MySQL root的密码,回车后,再次回车确认。程序会自动安装编译Nginx、PHP、MySQL、phpMyAdmin、Zend这几个软件。安装大约10分 钟左右需要设置MySQL root用户的密码。安装其他组件1、安装eAccelerator,执行如下命令:./eaccelerator.sh 就会自动安装并重启web服务。2、安装PureFTPd和管理面板,执行如下命令:./pureftpd.sh 就会自动安装PureFTPd,安装完PureFTPd,需要在浏览器执行http://你的域名或IP/ftp/install.php 安装PureFTPd用户管理,首。虚拟主机管理1、添加虚拟主机,执行如下命令:./vhost.sh 根据提示输入要绑定的域名,回车,如果需要添加更多的域名,输入y,再输入要另外绑定的域名,多个域名可以用空格隔开。再输入域名绑定的目录(绝对目录, 如/home/wwwroot/lnmp,如果不填默认是/home/wwwroot/绑定的域名),再选择是否添加伪静态规则,默认已经有了 Discuz、Wordpress、Sablog、emlog、dabr,可直接输入以上名称即可,如果需要添加自定义伪静态规则,直接输入一个想要的名 字,程序会自动创建伪静态文件,直接在/usr/local/nginx/conf/你自定义的伪静态名字.conf 里面添加伪静态规则就行。接下来会提示是否需要启用日志功能,一般情况下不需要启动,直接输入n就行,如需启动,输入y,再输入要定义的日志文件名字,回 车就会自动添加虚拟主机。
LNMP状态管理: /root/lnmp {start|stop|reload|restart|kill|status}
PureFTPd状态管理 /root/pureftpd {start|stop|restart|kill|status}
phpinfo : http://前面输入的域名或IP/phpinfo.php
phpMyAdmin : http://前面输入的域名或IP/phpmyadmin/
探针 : http://前面输入的域名或IP/p.php
MySQL root密码:如果不输入直接回车为root,否则为你输入的密码。

LNMP相关目录:
mysql : /usr/local/mysql
php : /usr/local/php
nginx : /usr/local/nginx
网站目录: /home/wwwroot

微软Email正则表达式,最完美的正则表达式

June 26th, 2010 No Comments »

^(?(“”)(“”.+?”"@)|(([0-9a-zA-Z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-zA-Z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,6}))$

经测试,可匹配admin@edmontonstudent.com, 不可匹配以下EMAIL:

.admin@edmontonstudent.com

admin@edmontonstudent.com.

adm..in@edmontonstudent.com

苹果iOS 4/3.1.3解锁教程

June 26th, 2010 1 Comment »

苹果iOS 4/3.1.3解锁教程

6月22日凌晨,苹果iOS 4公布,当天下午黑客就放出了iOS 4的解锁公布ultrasn0w,该程序可以同时对3.1.3固件进行解锁。

不过,由于iOS 4暂时没有被越狱,所以解锁软件暂时没法安装,无用武之地。但是还没有升级iOS 4,还是3.1.3版本的网友,你们的锁网版iPhone终于可以打电话了。

以下是简单的解锁教程(针对3.1.3):

0.确保你不是使用最新版的iTunes 9.2;

1.使用Spirit越狱你的3.1.3 iPhone;http://spiritjb.com/

2.打开Cydia,升级提示所需要升级的文件后重新打开Cydia。点击底部的Manage,进入Sources菜单

3.依次点击Edit、Add,输入repo666.ultrasn0w.com,添加这个源

4.重新进入Sources菜单,点击刚才添加的repo666.ultrasn0w.com,安装里面的ultrasn0w0.9.3。

5.重启你的iPhone,就能看到信号了。 各款iPhone的iOS 4的越狱方法出现后,可以用此文来解锁对应的iPhone手机,包括iPhone 4

discuz 7.2 论坛数据结构

June 7th, 2010 No Comments »

cdb_access               用户权限表
cdb_adminactions         管理动作表
cdb_admingroups           管理组数据表
cdb_adminnotes           管理员留言
cdb_adminsessions         管理员后台在线记录
cdb_advertisements       广告资料表
cdb_announcements         论坛公告资料表
cdb_attachments           附件资料表
cdb_attachtypes           附件类型表
cdb_banned               被禁止的ip列表
cdb_bbcodes               bb代码资料表
cdb_blogcaches           博客缓存表
cdb_buddys               好友信息表
cdb_creditslog           积分交易记录表
cdb_crons                 计划任务表
cdb_failedlogins         错误登录记录
cdb_favorites             个人收藏信息表
cdb_forumfields           板块扩展信息数据表
cdb_forumlinks           友情链接数据表
cdb_forums               版块资料表
cdb_medals               勋章资料表
cdb_memberfields         用户扩展资料表
cdb_members               用户基本资料表
cdb_moderators           版主信息数据表
cdb_modworks             版主工作记录表
cdb_onlinelist           在线列表定制
cdb_onlinetime           用户在线时间信息表
cdb_orders               订单数据表
cdb_paymentlog           支付记录
cdb_pluginhooks           插件钩子表
cdb_plugins               插件表
cdb_pluginvars           插件配置表
cdb_pms                   短信资料表
cdb_pmsearchindex         短消息搜索缓存表
cdb_polls                 投票帖资料表
cdb_posts                 帖子资料表
cdb_profilefields         用户栏目定制
cdb_promotions           论坛推广
cdb_ranks                 头衔表
cdb_ratelog               帖子评分记录表
cdb_regips               注册ip记录表
cdb_relatedthreads       相关主题
cdb_rsscaches             RSS缓存
cdb_searchindex           搜索缓存
cdb_sessions             在线表
cdb_settings             论坛设置表
cdb_smilies               表情信息表
cdb_stats               统计数据表
cdb_statvars             统计变量表
cdb_styles               风格
cdb_stylevars             风格变量表
cdb_subscrīptions         订阅信息表
cdb_templates             模板
cdb_threads               主题资料表
cdb_threadsmod           主题管理记录表
cdb_threadtypes           主题分类表
cdb_usergroups           用户组数据表
cdb_validating           等待人工审核的会员记录
cdb_words                 词语过滤表

stl multimap使用介绍

June 1st, 2010 2 Comments »

在“使用 <map> 库创建关联容器” 一文中,我们讨论了标准库中的 map 关联容器。但那只是 map 容器的一部分。标准库还定义了一个 multimap 容器,它与 map 类似,所不同的是它允许重复键。这个属性使得 multimap 比预想的要更有用:比如在电话簿中相同的人可以有两个以上电话号码,文件系统中可以将多个符号链接映射到相同的物理文件,或DNS服务器可以将几个URLs映射到相同的IP地址。在这些场合,你可以象下面这样:

// 注: 伪码
multimap <string, string> phonebook;
phonebook.insert(“Harry”,”8225687″); // 家里电话
phonebook.insert(“Harry”,”555123123″); // 单位电话
phonebook.insert(“Harry”,” 2532532532″); // 移动电话
在 multimap 中能存储重复键的能力大大地影响它的接口和使用。那么如何创建非唯一键的关联容器呢?答案是使用在 <map> 库中定义的 multimap 容器。

提出问题
与 map 不同,multimap 可以包含重复键。这就带来一个问题:重载下标操作符如何返回相同键的多个关联值?以下面的伪码为例:
string phone=phonebook["Harry];  标准库设计者的解决这个问题方法是从 multimap 中去掉下标操作符。因此,需要用不同的方法来插入和获取元素以及和进行错误处理。

插入
假设你需要开发一个 DNS 后台程序(也就是 Windows 系统中的服务程序),该程序将 IP 地址映射匹配的 URL 串。你知道在某些情况下,相同的 IP 地址要被关联到多个 URLs。这些 URLs 全都指向相同的站点。在这种情况下,你应该使用 multimap,而不是 map。例如:
#include <map>#include <string>multimap <string, string> DNS_daemon;  用 insert() 成员函数而不是下标操作符来插入元素。insert()有一个 pair 类型的参数。在“使用 <map> 库创建关联容器”中我们示范了如何使用 make_pair() 辅助函数来完成此任务。
你也可以象下面这样使用它:
DNS_daemon.insert(make_pair(“213.108.96.7″,”www.edmontonstudent.com”));
在上面的 insert()调用中,串 “213.108.96.7”是键,“www.edmontonstudent.com”是其关联的值。以后插入的是相同的键,不同的关联值:
DNS_daemon.insert(make_pair(“213.108.96.7″,”780china.com”));
因此,DNS_daemon 包含两个用相同键值的元素。注意 multimap::insert() 和 map::insert() 返回的值是不同的。
typedef pair <const Key, T> value_type;iterator insert(const value_type&); // #1 multimappair <iterator, bool>insert(const value_type&); // #2 map  multimap::insert()成员函数返回指向新插入元素的迭代指针,也就是 iterator(multimap::insert()总是能执行成功)。但是 map::insert() 返回 pair<iterator, bool>,此处 bool 值表示插入操作是否成功。

查找单个值
与 map 类似,multimap 具备两个版本重载的 find()成员函数:
iterator find(const key_type& k);
const_iterator find(const key_type& k) const;
find(k) 返回指向第一个与键 k 匹配的 pair 的迭代指针,这就是说,当你想要检查是否存在至少一个与该键关联的值时,或者只需第一个匹配时,这个函数最有用。例如:
typedef multimap <string, string> mmss;
void func(const mmss & dns)
{
mmss::const_iterator cit=dns.find(“213.108.96.7″);
if (cit != dns.end())
cout <<”213.108.96.7 found” <<endl;
else
cout <<”not found” <<endl; }处理多个关联值
count(k) 成员函数返回与给定键关联的值得数量。下面的例子报告了有多少个与键 “213.108.96.7” 关联的值:
cout<<dns.count(“213.108.96.7″) //
output: 2<<” elements associated”<<endl;
为了存取 multimap 中的多个值,使用 equal_range()、lower_bound()和 upper_bound()成员函数:
equal_range(k):该函数查找所有与 k 关联的值。返回迭代指针的 pair,它标记开始和结束范围。下面的例子显示所有与键“213.108.96.7”关联的值:
typedef multimap <string, string>::const_iterator CIT;
typedef pair<CIT, CIT> Range;
Range range=dns.equal_range(“213.108.96.7″);
for(CIT i=range.first; i!=range.second; ++i)cout << i->second << endl; //output: cpluspluszone.com// cppzone.com  lower_bound() 和 upper_bound():lower_bound(k) 查找第一个与键 k 关联的值,而 upper_bound(k) 是查找第一个键值比 k 大的元素。下面的例子示范用 upper_bound()来定位第一个其键值大于“213.108.96.7”的元素。通常,当键是一个字符串时,会有一个词典编纂比较:
dns.insert(make_pair(“219.108.96.70″, “wantsoft.com”));
CIT cit=dns.upper_bound(“213.108.96.7″);
if (cit!=dns.end()) //found anything?    cout<<cit->second<<endl; //display: wantsoft.com

如果你想显示其后所有的值,可以用下面这样的循环:

// 插入有相同键的多个值
dns.insert(make_pair(“219.108.96.70″,”wantsoft.com”));
dns.insert(make_pair(“219.108.96.70″,”edmontonstudent.com”));// 获得第一个值的迭代指针CIT cit=dns.upper_bound(“213.108.96.70″);// 输出: wantsoft.com和edmontonstudent.com
while(cit!=dns.end()){    cout<<cit->second<<endl;    ++cit;}结论
虽然 map 和 multimap 具有相同的接口,其重要差别在于重复键,设计和使用要区别对待。此外,还要注意每个容器里 insert()成员函数的细微差别。

本文为wantsoft.com原创,引用请保留本行版权声明。

C#发送Email邮件三种方法的总结

May 28th, 2010 No Comments »

通过.Net FrameWork 2.0下提供的“System.Net.Mail”可以轻松的实现,本文列举了3种途径来发送:

1.通过Localhost;
2.通过普通SMTP;
3.通过SSL的SMTP;

下面一个一个来说:

1.通过LocalHost

public void SendMailLocalhost()
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(“admin@780china.com”);
msg.To.Add(“webmaster@edmontonstudent.com”);
/* msg.To.Add(“admin@wantsoft.com”);
* msg.To.Add(“info@edmontonstudent.com”);
*/
msg.CC.Add(“admin@vanke.ca”);
/*
* msg.CC.Add(“admin@vanke.ca”);
* msg.CC.Add(“c@c.com”);可以抄送给多人
*/
msg.From = new MailAddress(“admin@vanke.ca”, “AlphaWu”, System.Text.Encoding.UTF8);
/* 上面3个参数分别是发件人地址(可以随便写),发件人姓名,编码*/
msg.Subject = “这是测试邮件”;//邮件标题
msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码
msg.Body = “邮件内容”;//邮件内容
msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
msg.IsBodyHtml = false;//是否是HTML邮件
msg.Priority = MailPriority.High;//邮件优先级

SmtpClient client = new SmtpClient();
client.Host = “localhost”;
object userState = msg;
try
{
client.SendAsync(msg, userState);
//简单一点儿可以client.Send(msg);
MessageBox.Show(“发送成功”);
}
catch (System.Net.Mail.SmtpException ex)
{
MessageBox.Show(ex.Message, “发送邮件出错”);
}
}

2.通过普通SMTP

public void SendMailUseZj()
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(“admin@780china.com”);
msg.To.Add(“webmaster@edmontonstudent.com”);
/*
msg.To.Add(“admin@780china.com”);
msg.To.Add(“webmaster@edmontonstudent.com”);
*/
msg.CC.Add(“admin@vanke.ca”);
/*
*msg.CC.Add(“admin@vanke.ca”);
* msg.CC.Add(“admin@wantsoft.com”);可以抄送给多人
*/
msg.From = new MailAddress(“admin@wantsoft.com”, “AlphaWu”, System.Text.Encoding.UTF8);
/* 上面3个参数分别是发件人地址(可以随便写),发件人姓名,编码*/
msg.Subject = “这是测试邮件”;//邮件标题
msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码
msg.Body = “邮件内容”;//邮件内容
msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
msg.IsBodyHtml = false;//是否是HTML邮件
msg.Priority = MailPriority.High;//邮件优先级

SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential(“username@zj.com”, “userpass”);
//在zj.com注册的邮箱和密码
client.Host = “smtp.zj.com”;
object userState = msg;
try
{
client.SendAsync(msg, userState);
//简单一点儿可以 client.Send(msg);
MessageBox.Show(“发送成功”);
}
catch (System.Net.Mail.SmtpException ex)
{
MessageBox.Show(ex.Message, “发送邮件出错”);
}
}

上述方法不适用于所有SMTP,经测试zj.com可以,而smtp.163.com不行
3.通过SSL的SMTP

public void SendMailUseGmail()
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.To.Add(“admin@780china.com”);
msg.To.Add(“webmaster@edmontonstudent.com”);
/*
msg.To.Add(“admin@780china.com”);
msg.To.Add(“webmaster@edmontonstudent.com”);可以发送给多人
*/
msg.CC.Add(“admin@vanke.ca”);
/*
*msg.CC.Add(“admin@vanke.ca”);可以抄送给多人
*/
msg.From = new MailAddress(“admin@vanke.ca”, “AlphaWu”, System.Text.Encoding.UTF8);
/* 上面3个参数分别是发件人地址(可以随便写),发件人姓名,编码*/
msg.Subject = “这是测试邮件”;//邮件标题
msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码
msg.Body = “邮件内容”;//邮件内容
msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
msg.IsBodyHtml = false;//是否是HTML邮件
msg.Priority = MailPriority.High;//邮件优先级
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential(“username@gmail.com”, “password”);
//上述写你的GMail邮箱和密码
client.Port = 587;//Gmail使用的端口
client.Host = “smtp.gmail.com”;
client.EnableSsl = true;//经过ssl加密
object userState = msg;
try
{
client.SendAsync(msg, userState);
//简单一点儿可以 client.Send(msg);
MessageBox.Show(“发送成功”);
}
catch (System.Net.Mail.SmtpException ex)
{
MessageBox.Show(ex.Message, “发送邮件出错”);
}
}

通过Gmail来发送邮件,成功率极高,几乎都可以发到,推荐使用。

手把手教你HTTP协议之POST方法

May 19th, 2010 No Comments »

和GET方法一样,POST方法也是HTTP协议中的一个重要组成部分。POST方法一般用来向目的服务器发出请求,并附有请求实体。
POST被 设计成用统一的方法实现下列功能:
o 对现有资源的注释(Annotation of existing resources);
o 向电子公告栏、新闻组,邮件列表或类似讨论组发送消息;
o 提交数据块,如将表格(form)的结果提交给数据处理过程;
o 通过附加操作来扩展数据库。
o 也可用来上传文件。

在所有的HTTP的POST请求中,必须指定合法的内容长度(Content-Length)。
如果HTTP/1.0服务器在接收到请求消息内容 时无法确定其长度,就会返回400(非法请求)代码。
应用程序不能缓存对POST请求的回应,因为做为应用程序来说,它们没有办法知道服务器在 未来的请求中将如何回应。

POST方式和GET方法的最大区别就是把发送的数据和URI地址分离。请求参数是在http标题的一个不同 部分(名为entity body)传输的,这一部分用来传输表单信息,因此必须将Content-type设置为:application/x-www-form- urlencoded。

Post请求格式如下:
POST /login.asp HTTP/1.1
Accept: */*
Referer: http://www.wantsoft.com
Accept-Language: zh-cn,en-us;q=0.5
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
Host: www.wantsoft.com
Content-Length: 35
Pragma: no-cache
Cache-Control: no-cache
username=wantsoft&password=password   //post的数据

应答格式如下:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Fri, 05 Dec 2008 15:44:38 GMT
Content-Length: 27
Content-Type: text/html
Cache-control: private
welcome to www.wantsoft.com         //网页的正文内容

使用类CHttpConnection完成http post的代码如下:
BOOL PostRequest(LPCTSTR lpszURL,        // 如:www.wantsoft.com
LPCTSTR lpszObjectName,        // 如index.asp
LPCTSTR lpszOptionalData,                      // 如:username=chrys&password=MyPassword
LPCTSTR lpszReferer,        // 如:/modify-new.htm
OUT CString &csResponse)
{

BOOL bRet = FALSE;
CString csHeaders, csOptionalData = lpszOptionalData, csContentLength;
csContentLength.Format ( “Content-Length: %d\n”, csOptionalData.GetLength() );

csHeaders += “Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*\n”;
csHeaders += “Referer: http://“;
csHeaders += lpszURL;
csHeaders += lpszReferer;
csHeaders += “\n”;
csHeaders += “Accept-Language: zh-cn,en-us;q=0.5\n”;
csHeaders += “Content-Type: application/x-www-form-urlencoded\n”;
csHeaders += “Proxy-Connection: Keep-Alive\n”;
csHeaders += “User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; .NET CLR 1.0.3705; .NET CLR 1.1.4322)\n”;
csHeaders += “Host: “;
csHeaders += lpszURL;
csHeaders += “\n”;
csHeaders += csContentLength;
csHeaders += “Pragma: no-cache\n”;
csHeaders += “\r\n”;

CHttpFile* pMyHttpFile = NULL;
CHttpConnection* pConnection = NULL;
CInternetSession mySession;
try
{
mySession.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 10*1000);
pConnection = mySession.GetHttpConnection(_T(lpszURL));
pMyHttpFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, lpszObjectName);
if ( pMyHttpFile->SendRequest(csHeaders,
(LPVOID)(LPCTSTR)csOptionalData, csOptionalData.GetLength()) )
{
DWORD dwStatus;
DWORD dwBuffLen = sizeof(dwStatus);
pMyHttpFile->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwBuffLen);
if ( HTTP_STATUS_OK == dwStatus )
{
csResponse.Empty ();
CString myData;
while ( pMyHttpFile->ReadString ( myData ) )
{
csResponse += myData;
}
bRet = TRUE;
}
}
}
catch ( CInternetException* pEx )
{
bRet = FALSE;
TCHAR   szErr[1024]={0};
pEx->GetErrorMessage(szErr,1024);
pEx->Delete();
}

if ( pMyHttpFile )
{
pMyHttpFile->Close();
delete pMyHttpFile;
}
if ( pConnection )
{
pConnection->Close();
delete pConnection;
}
mySession.Close();
return bRet;
}

本 文版权属于《Visual C++网络游戏建模与实现》作者苏羽和http://www.wantsoft.com共同所有,引用者请务必保留本 行版权信息,否则作者苏羽和http://www.wantsoft.com保留追究的权利。
点击下面链接下载

测试

May 19th, 2010 No Comments »

only a test