在此纪念几天的辛劳
这几天没事自己试了试VC的网页的自动回复功能的实现,于是呼百度一下就找到了本论坛里的大神的帖子,如果想自己学习请移 “ wangningyu ” 大神的帖子http://blog.youkuaiyun.com/wangningyu/article/details/4526357 帖子是好贴,可是里面也有许多问题,代码有错误,为了不让后来者也多走误区,分享我的经验
1、首先是抓包工具,这里推荐Http Watch和OmniPeek这两种,我觉得都挺好用的。
2、自己找一个论坛(本例中是没有图片验证的论坛),这里我用了优快云里的博客,PS:给如果管理带来的困扰请谅解,自己手动回复一个(记得抓包)抓包的内容啥的分析请参考相关知识,我这里需要说的是,注意格式,记住在Cookie后面一定有“两个”换行!!这里给大家贴张图片 (部分敏感信息给擦除了不影响学习)
看到最后那个Cookie的东西没有一定在最后给两个回车!!我在这都耽误了一天!!!!郁闷这个是你回复的内容!!也要加上,具体对比下面的代码!!PS:下面的代码里的Cookie都修改过,但是格式都是对了的!!
#include "stdio.h"
#include "winsock2.h"
#pragma comment(lib,"ws2_32.lib")
int main(int argc, char* argv[])
{
SOCKADDR_IN saServer;
LPHOSTENT lphostent;
WSADATA wsadata;
SOCKET hsocket;
int nRet;
char* host_name=("blog.xxxx.net");
//下面的格式很重要,记住Cookie后面有两个回车----> /r/n/r/n
char* req=("POST /wxxxxx/comment/submit?id=xxxxx HTTP/1.1\r\n\
Accept: */*\r\n\
X-HttpWatch-RID: 94113-10021\r\n\
Content-Type: application/x-www-form-urlencoded\r\n\
X-Requested-With: XMLHttpRequest\r\n\
Referer: http://blog.youkuaiyun.com/w_xuexi/article/details/35993689\r\n\
Accept-Language: zh-CN\r\n\
Accept-Encoding: gzip, deflate\r\n\
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko\r\n\
Host: blog.youkuaiyun.com\r\n\
Content-Length: 33\r\n\
Connection: Keep-Alive\r\n\
Cache-Control: no-cache\r\n\
Cookie: BAIDU_DUP_lcr=http://www.baidu.com/s?tn=82033038_8_hao_pg&ie=utf-8&bs=csd&f=8&rsv_bp=1&wd=csdn&rsv_sug3=3&rsv_sug4=488&rsv_sug1=4&rsv_sug2=0&inputT=4462; __utmc=172242236283; UserName=wxxxexi; UserInfo=J1%2FANwG0xxxx1nrZTFUpoXQa8FXyF1mIbw7EnoCkMshQd8P%2BK2blKyZkeZjxzj2xxxxxxB1q82iqWDo2Ws51QhsJhsltuxxxxxxImffTEwWWv3mUGE9baNtpx; \
UserNick=wxxxx; AU=DDE; access-token=b0925e2d-138f-4cb5-a816-33a40e109ec2; dc_session_id=140xxx270122; __utma=1722xxx83.1804244634.140423385851.1404385851.1404448258.2; __utmz=172232236283.1404448258.2.2.utmcsr=baidu|utmccn=(organic)|utmcmd=organic|utmctr=csdn; dc_tos=n86786; uuid_tt_dd=25300xxxxx9327791_20140703; __message_sys_msg_id=0;\
__message_gu_msg_id=0; __message_cnel_msg_id=0; __message_district_code=61xxx00; __message_in_school=0; UN=w_xuexi; UE=\"9xxxxx@qq.com\"; __utmb=17226s283.6.10.1404448258; uuid=3804a194-3ae0-4a61-adc7-ed0e22842fe3; bdshare_firstime=1404385892358; avh=35993689\r\n\r\n\
commentid=&content=开心&replyId=");
// 初始化套接字
if(WSAStartup(MAKEWORD(2,2),&wsadata))
printf("初始化SOCKET出错!");
lphostent=gethostbyname(host_name);
if(lphostent==NULL)
printf("lphostent为空!");
hsocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
saServer.sin_family = AF_INET;
saServer.sin_port = htons(80);
saServer.sin_addr = *((LPIN_ADDR)*lphostent->h_addr_list);
// 利用SOCKET连接
nRet = connect(hsocket,(LPSOCKADDR)&saServer,sizeof(SOCKADDR_IN));
if(nRet == SOCKET_ERROR)
{
printf("建立连接时出错!");
closesocket(hsocket);
return 0;
}
// 利用SOCKET发送
nRet = send(hsocket,req,strlen(req),0);
if(nRet==SOCKET_ERROR)
{
printf("发送数据包时出错!");
closesocket(hsocket);
}
char Dest[3000];
nRet=1;
//下面的读取内容可能有点问题,有时会有两个返回信息,不用理会第二个!!
while(nRet>0)
{
// 接收返回数据包
nRet=recv(hsocket,(LPSTR)Dest,sizeof(Dest),0);
if(nRet>0)
Dest[nRet]=0;
else
Dest[0]=0;
// 显示返回数据包的大小、内容
printf("\nReceived bytes:%d\n",nRet);
printf("Result:\n%s",Dest);
}
return 0;
}
PS:祝大家学习愉快!!!
由于网页面板问题,可能让代码有些地方有点乱,自己调整