已有代码如下
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
int main(int argc,char* argv[])
{char server_name[256]="zhidao.baidu.com"; WSADATA wsaData;struct sockaddr_in srv_addr;if (WSAStartup(0x202,&wsaData)== SOCKET_ERROR) {
WSACleanup();return-1;
} SOCKET cli_sock=socket(PF_INET,SOCK_STREAM,0);if (cli_sock==INVALID_SOCKET)return-1;// connect to server
srv_addr.sin_family= AF_INET;
LPHOSTENT lphost= gethostbyname(server_name);if (lphost!= NULL)
srv_addr.sin_addr.s_addr= ((LPIN_ADDR)lphost->h_addr)->s_addr;
srv_addr.sin_port= ntohs(80);if (connect(cli_sock,(LPSOCKADDR)&srv_addr,sizeof(srv_addr))==SOCKET_ERROR){return-1;
}
//char sz[]="GET / HTTP/1.1\r\nHost:www.163.com\r\n\r\n";
char sz[]="GET /question/94111357.html HTTP/1.1\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; )\r\nHost: zhidao.baidu.com\r\n\r\n\r\n";
int retval= send(cli_sock,sz,sizeof(sz)-1,0);
if( SOCKET_ERROR== retval )
return 0;
char buffer[1024]={0};
while( SOCKET_ERROR!= retval ){
retval= recv(cli_sock ,buffer,1000,0);
printf("%s\n",buffer);
}
closesocket(cli_sock);
return 0;
} 问题是现在返回的包里面汉字仅是百度知道的相关问题,没有该问题的 最佳答案不知道是动态加载还是什么的如果能get得到的包中去掉字符,只留下汉字最好如果 不能用socket get,最好给个小例子
如能解决,给大牛1000分做膜拜礼
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
int main(int argc,char* argv[])
{char server_name[256]="zhidao.baidu.com"; WSADATA wsaData;struct sockaddr_in srv_addr;if (WSAStartup(0x202,&wsaData)== SOCKET_ERROR) {
WSACleanup();return-1;
} SOCKET cli_sock=socket(PF_INET,SOCK_STREAM,0);if (cli_sock==INVALID_SOCKET)return-1;// connect to server
srv_addr.sin_family= AF_INET;
LPHOSTENT lphost= gethostbyname(server_name);if (lphost!= NULL)
srv_addr.sin_addr.s_addr= ((LPIN_ADDR)lphost->h_addr)->s_addr;
srv_addr.sin_port= ntohs(80);if (connect(cli_sock,(LPSOCKADDR)&srv_addr,sizeof(srv_addr))==SOCKET_ERROR){return-1;
}
//char sz[]="GET / HTTP/1.1\r\nHost:www.163.com\r\n\r\n";
char sz[]="GET /question/94111357.html HTTP/1.1\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; )\r\nHost: zhidao.baidu.com\r\n\r\n\r\n";
int retval= send(cli_sock,sz,sizeof(sz)-1,0);
if( SOCKET_ERROR== retval )
return 0;
char buffer[1024]={0};
while( SOCKET_ERROR!= retval ){
retval= recv(cli_sock ,buffer,1000,0);
printf("%s\n",buffer);
}
closesocket(cli_sock);
return 0;
} 问题是现在返回的包里面汉字仅是百度知道的相关问题,没有该问题的 最佳答案不知道是动态加载还是什么的如果能get得到的包中去掉字符,只留下汉字最好如果 不能用socket get,最好给个小例子
如能解决,给大牛1000分做膜拜礼
你可以用http1.0试试
用winet api的话就不用自己解压数据了
#include <string>
#include <vector>
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")int main(int argc,char* argv[])
{
char server_name[256]="zhidao.baidu.com"; WSADATA wsaData;struct sockaddr_in srv_addr;if (WSAStartup(0x202,&wsaData)== SOCKET_ERROR)
{
WSACleanup();return-1;
} SOCKET cli_sock=socket(PF_INET,SOCK_STREAM,0);
if (cli_sock==INVALID_SOCKET)
return-1;// connect to server
srv_addr.sin_family= AF_INET;
LPHOSTENT lphost= gethostbyname(server_name);
if (lphost!= NULL)
srv_addr.sin_addr.s_addr= ((LPIN_ADDR)lphost->h_addr)->s_addr;
srv_addr.sin_port= ntohs(80);
if (connect(cli_sock,(LPSOCKADDR)&srv_addr,sizeof(srv_addr))==SOCKET_ERROR)
{
return-1;
}
//char sz[]="GET / HTTP/1.1\r\nHost:www.163.com\r\n\r\n";
char sz[]="GET http://zhidao.baidu.com/question/94111357.html HTTP/1.0\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; )\r\nHost: zhidao.baidu.com\r\n\r\n";
int retval= send(cli_sock,sz,sizeof(sz),0);
if( SOCKET_ERROR== retval )
return 0;
char buffer[50000+1]={0};
int nTotal=0;
while( SOCKET_ERROR!= retval ){
retval= recv(cli_sock ,buffer+nTotal,50000,0);
if (retval<=0)
{
break;
}
nTotal+=retval;
}
closesocket(cli_sock);
buffer[nTotal]=0;
printf("%s\n",buffer);
system("pause");
return 0;
}
WSADATA wsaData;struct sockaddr_in srv_addr;if (WSAStartup(0x202,&wsaData)== SOCKET_ERROR) {
WSACleanup();return-1;
} SOCKET cli_sock=socket(PF_INET,SOCK_STREAM,0);if (cli_sock==INVALID_SOCKET)return-1;// connect to server
srv_addr.sin_family= AF_INET;
LPHOSTENT lphost= gethostbyname(server_name);
if (lphost!= NULL)
srv_addr.sin_addr.s_addr= ((LPIN_ADDR)lphost->h_addr)->s_addr;
srv_addr.sin_port= ntohs(80);if (connect(cli_sock,(LPSOCKADDR)&srv_addr,sizeof(srv_addr))==SOCKET_ERROR){return-1;
}
char sz[]="GET /question/94111357.html HTTP/1.1\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; )\r\nHost: zhidao.baidu.com\r\n\r\n\r\n";
int retval= send(cli_sock,sz,sizeof(sz)-1,0);
if( SOCKET_ERROR== retval )
return 0;
char buffer[1024]={0};
char ShowBuffer[1024]={0};
int nChCount = 0 ;
while( SOCKET_ERROR!= retval && retval>0 )
{
ZeroMemory(buffer,sizeof(buffer));
retval= recv(cli_sock ,buffer,sizeof(buffer),0);
//printf("%s",buffer);
for(int i =0;i< retval;i++)
{
if(buffer[i]>0)
{
continue;
}
nChCount++;
ShowBuffer[strlen(ShowBuffer)]=buffer[i];
if(strlen(ShowBuffer)>=sizeof(ShowBuffer)-10 && nChCount%2==0)
{
printf("%s",ShowBuffer);
ZeroMemory(ShowBuffer,sizeof(ShowBuffer));
}
}
}
closesocket(cli_sock);
return 0;
int _tmain(int argc, _TCHAR* argv[])
{
char server_name[256]= "zhidao.baidu.com";
WSADATA wsaData;struct sockaddr_in srv_addr;if (WSAStartup(0x202,&wsaData)== SOCKET_ERROR) {
WSACleanup();return-1;
} SOCKET cli_sock=socket(PF_INET,SOCK_STREAM,0);if (cli_sock==INVALID_SOCKET)return-1;// connect to server
srv_addr.sin_family= AF_INET;
LPHOSTENT lphost= gethostbyname(server_name);
if (lphost!= NULL)
srv_addr.sin_addr.s_addr= ((LPIN_ADDR)lphost->h_addr)->s_addr;
srv_addr.sin_port= ntohs(80);if (connect(cli_sock,(LPSOCKADDR)&srv_addr,sizeof(srv_addr))==SOCKET_ERROR){return-1;
}
char sz[]="GET /question/94111357.html HTTP/1.1\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; )\r\nHost: zhidao.baidu.com\r\n\r\n\r\n";
int retval= send(cli_sock,sz,sizeof(sz)-1,0);
if( SOCKET_ERROR== retval )
return 0;
char buffer[1024]={0};
char ShowBuffer[1024]={0};
int nChCount = 0 ;
while( SOCKET_ERROR!= retval && retval>0 )
{
ZeroMemory(buffer,sizeof(buffer));
retval= recv(cli_sock ,buffer,sizeof(buffer),0);
//printf("%s",buffer);
for(int i =0;i< retval;i++)
{
if(buffer[i]>0)
{
continue;
}
nChCount++;
ShowBuffer[strlen(ShowBuffer)]=buffer[i];
if(strlen(ShowBuffer)>=sizeof(ShowBuffer)-10 && nChCount%2==0)
{
char * szBest = strstr(ShowBuffer,"最佳答案");
if( szBest)
{
char* szContent = szBest+8;
*szBest = 0 ;
printf("%s",ShowBuffer);
printf("%s","\n\n******************以下是最佳答案*********************\n\n");
printf("%s",szContent);
}else
{
printf("%s",ShowBuffer);
}
ZeroMemory(ShowBuffer,sizeof(ShowBuffer));
}
}
}
closesocket(cli_sock);
return 0; }
其实数据都是有的了
还得将最佳答案给你打出来才行!#include <iostream>
#include <string>
#include <vector>
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")int main(int argc,char* argv[])
{
char server_name[256]="zhidao.baidu.com"; WSADATA wsaData;struct sockaddr_in srv_addr;if (WSAStartup(0x202,&wsaData)== SOCKET_ERROR)
{
WSACleanup();return-1;
} SOCKET cli_sock=socket(PF_INET,SOCK_STREAM,0);
if (cli_sock==INVALID_SOCKET)
return-1;// connect to server
srv_addr.sin_family= AF_INET;
LPHOSTENT lphost= gethostbyname(server_name);
if (lphost!= NULL)
srv_addr.sin_addr.s_addr= ((LPIN_ADDR)lphost->h_addr)->s_addr;
srv_addr.sin_port= ntohs(80);
if (connect(cli_sock,(LPSOCKADDR)&srv_addr,sizeof(srv_addr))==SOCKET_ERROR)
{
return-1;
}
//char sz[]="GET / HTTP/1.1\r\nHost:www.163.com\r\n\r\n";
char sz[]="GET http://zhidao.baidu.com/question/94111357.html HTTP/1.1\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg\r\nAccept-Language: zh-cn\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; )\r\nHost: zhidao.baidu.com\r\n\r\n";
int retval= send(cli_sock,sz,sizeof(sz),0);
if( SOCKET_ERROR== retval )
return 0;
char buffer[50000+1]={0};
int nTotal=0;
while( SOCKET_ERROR!= retval ){
retval= recv(cli_sock ,buffer+nTotal,50000,0);
if (retval<=0)
{
break;
}
nTotal+=retval;
}
closesocket(cli_sock);
buffer[nTotal]=0;
char *pStart = strstr(buffer,"<ca><pre>");
char *pEnd = strstr(pStart,"</pre></ca>");
int nLen = pEnd - pStart-9;
char *pGoodAnswer =new char[nLen+1];
ZeroMemory(pGoodAnswer,nLen+1);
pStart+=9;
memcpy(pGoodAnswer,pStart,nLen);
printf("%s\n",pGoodAnswer);
delete [] pGoodAnswer;
system("pause");
return 0;
}
2、提取里面的链接可以用正则