Wininet CInternetSession类编程的一些心得 包括如何清空cookie

C/C++ 同时被 2 个专栏收录
2 篇文章 0 订阅
1 篇文章 0 订阅

 废话不多直接说自己的心得了:

 

1、如何自己创建http头部:

先抓包自己登陆的网站封确定下封包头是什么样子的

然后构造

以下网址链接都是举例用的,实际网址及链 需要自己用抓包工具确定!

CString UrlHeadStr=_T("Accept: */*/r/nReferer: http://www.sina.com.com/r/nAccept-Language: zh-tw/r/nAccept-Encoding: gzip, deflate/r/nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)/r/nHost: www.sina.com: Keep-Alive/r/n");

 构造完了连接:

JionstrUrl 为要连接网站的web地址,里面某些参数我使用默认值 具体需求 请参照msdn。

CHttpFile *pfile=(CHttpFile *)session->OpenURL(JionstrUrl,1,1,UrlHeadStr,UrlHeadStr.GetLength());

或者通过 :

nPort 为网站端口

CHttpConnection* pconnection =session->GetHttpConnection(_T("www.sina.com.cn"),nPort); //l连接网站服务器 
 CHttpFile *pfile = pconnection->OpenRequest(CHttpConnection::HTTP_VERB_GET,_T("/member_join.php?rid=1"));
 pfile->AddRequestHeaders(UrlHeadStr);

 

2、cookie的修改:

cookie 没有办法通过 ::AddRequestHeader进行修改的这点要切记,企图用这个方法修改就是徒劳。而且在一个进程环境中,连接过的网站,在不同的时间、不同线程、不同session里创建的对象中 都是相同的。这个某些特殊开发中非常郁闷了。查阅了大量网站 都说 无法修改尤其是清除掉cookie的某个键值,并且说这个是个bug其实这个是不对的。我们这里假设我们要清空cookie里的三个键值分别是:

PHPSESSID  ROUTEID  loginname 这里的键值 就是你抓包看到的Cookie:里xxxxxx= 字样中的xxxxx就为一个键值;

 

 session->SetCookie(JionstrUrl,_T("PHPSESSID"),_T("deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT"));//清空Cookie
 session->SetCookie(JionstrUrl,_T("ROUTEID"),_T("deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT"));//清空Cookie
 session->SetCookie(JionstrUrl,_T("loginname"),_T("deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT"));//清空Cookie

 

使用这样就可以cookie里 PHPSESSID  ROUTEID  loginname 三个键值取消掉了,原理是设置过期时间为电脑已经发生过的日期。

 

 

最后 CInternetSession类的异步编程这里 一直在研究 因为发现如果通过::GetHttpConnection 方式连接网站 则回调函数里收不到

INTERNET_STATUS_REQUEST_COMPLETE  这个消息。如果你知道如何处理 请不啬赐教!

 

 

 

 

 

 

  • 0
    点赞
  • 4
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值