获取指定QQ空间标题
来源:互联网 发布:centos如何启用双网卡 编辑:程序博客网 时间:2024/05/21 07:04
我没有处理中文乱码,留给需要的人处理吧,只要转换一下编码就可以了。。。
调用代码:
#include "stdafx.h"#include "SocketHttp.h"int _tmain(int argc, _TCHAR* argv[]){ CSocketHttp skHttp; string strWebTitle = skHttp.GetQzoneUserTitle("20156666"); printf("获取到标题:\n"); printf("%s", strWebTitle.c_str()); getchar();return 0;}
SocketHttp.h文件:
#pragma once#include <Winsock2.h>#pragma comment(lib, "Ws2_32.lib")#include <string>using std::string;class CSocketHttp{public: CSocketHttp(void); ~CSocketHttp(void); bool InitSocket(void); // 初始化socket环境 void UnInitSocket(void); // 清理socket环境 string GetQzoneUserTitle(string strQQ); // 获取QQ空间标题public: bool m_bIsInitSocketOk; // 标志socket是否初始化成功};
SocketHttp.cpp
#include "StdAfx.h"#include "SocketHttp.h"CSocketHttp::CSocketHttp(void){ m_bIsInitSocketOk = InitSocket();}CSocketHttp::~CSocketHttp(void){ UnInitSocket();}/**@Name: InitSocket@Brief: 初始化socket环境@Param: void@Return:bool*/bool CSocketHttp::InitSocket( void ){ WSADATA data = {0}; if(WSAStartup(MAKEWORD(2, 2), &data)) { return false; } if (LOBYTE(data.wVersion) != 2 || HIBYTE(data.wVersion) != 2) { WSACleanup(); return false; } return true;}/**@Name: UnInitSocket@Brief: 清理socket环境@Param: void@Return:void*/void CSocketHttp::UnInitSocket( void ){ WSACleanup();}/**@Name: GetWebTitle@Brief: 获取指定QQ空间标题@Param: string strQQ, QQ号码@Return:成功返回空间标题,失败返回长度为0的字符窜*/string CSocketHttp::GetQzoneUserTitle(string strQQ){ string strWebTitle; if (strQQ.length() <= 0 || !m_bIsInitSocketOk) { return strWebTitle; } struct hostent *pHost = gethostbyname("user.qzone.qq.com"); if (pHost == NULL) { return strWebTitle; } SOCKET skServer = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP); if (skServer == INVALID_SOCKET ) { return strWebTitle; } sockaddr_in serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(80); serverAddr.sin_addr.s_addr = *(DWORD*)pHost->h_addr_list[0]; int iRet = connect(skServer, (struct sockaddr *)&serverAddr, sizeof(struct sockaddr)); if (iRet == SOCKET_ERROR) { return strWebTitle; } // 发送HTTP协议数据 // GET http://user.qzone.qq.com/QQNumber/main HTTP/1.1 // Host: user.qzone.qq.com // Connection: keep-alive // Cache-Control: max-age=0 // Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 // User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) string strSend; strSend += "GET http://user.qzone.qq.com/QQNumber/main HTTP/1.1\r\n"; strSend += "Host: user.qzone.qq.com\r\n"; strSend += "Connection: keep-alive\r\n"; strSend += "Cache-Control: max-age=0\r\n"; strSend += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n"; strSend += "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)\r\n\r\n"; strSend.replace(strSend.find("QQNumber"), 8, strQQ); iRet = send(skServer, strSend.c_str(), strSend.length(), 0); if (iRet == SOCKET_ERROR) { return strWebTitle; } // 获取服务器返回的数据 char szBuf[1024*5] = {0}; iRet = recv(skServer, szBuf, sizeof(szBuf), 0); if (iRet == SOCKET_ERROR) { return strWebTitle; } // 解析网页标题 // <title>xxx</title> strWebTitle = string(szBuf); size_t siPosStart = 0; size_t siPosEnd = 0; siPosStart = strWebTitle.find("<title>"); if (siPosStart != string::npos) { strWebTitle.erase(0, siPosStart + 7); } siPosEnd = strWebTitle.find("</title>"); if (siPosEnd != string::npos) { strWebTitle.erase(siPosEnd - 1); } if (siPosEnd == string::npos) { return ""; } return strWebTitle;}
效果截图:
0 0
- 获取指定QQ空间标题
- QQ空间获取指定QQ号信息接口
- 仿QQ空间的透明标题头
- java实现QQ空间日志列表获取
- Python2.7获取QQ空间部分好友
- Python2.7获取QQ空间好友头像
- Python2.7获取QQ空间全部好友
- 如何获取qq空间图片的url
- 通过QQ号码获取QQ头像、昵称以及空间头像
- 通过QQ号获取QQ头像、昵称以及空间头像
- 获取指定路径的剩余空间
- Linux 获取指定路径空间大小方法
- C#获取指定文件夹空间大小
- 仿QQ空间标题效果 下拉刷新 动画缩放 标题渐隐
- QQ空间
- QQ空间
- QQ空间
- QQ空间里静太页获取URL参数的函数
- [Mac使用技巧]如何显示隐藏文件
- [2413]n a^o7 !
- activemq链接mysql
- Google的C++开源代码项目
- 级联下拉菜单
- 获取指定QQ空间标题
- 链接、装载与库:动态链接
- setitmer() linux 下的精确定时函数
- Unity3D插件EasyTouch详细说明(01)
- 使用ajaxfileupload插件实现异步上传并保存图片功能
- android 网络访问-图片处理优秀开源项目 (201
- Eclipse快捷键
- C++ 高维指针数组 与 高维数组指针(一)
- 做一名文艺青年-3D游戏引擎从2D开始