首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

通过URL取得html文件内容解决思路

2012-03-08 
通过URL取得html文件内容遇到一道变态面试题目,要求不允许调用urlmon.dll和wininet.dll,已知一个URL,如何

通过URL取得html文件内容
遇到一道变态面试题目,要求不允许调用urlmon.dll和wininet.dll,已知一个URL,如何取得相对应的html文件里的部分字节内容?我有两个问题向大家求救?
 1.我想到一种方法,用WinExec启动ie,然后利用ie访问URL,不过不知道怎么传递那个URL   给ie.
    2.还有没有更好的方法,解决此问题?若能不下载文件就获得指定部分的内容更好。小弟的饭碗靠大家了!

[解决办法]
用sock连接80端口

发送请求

GET http://www.sina.com
[解决办法]
题目应该是考察socket编程和http协议的...
[解决办法]
socket可以通过域名访问的


#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <vector>
#define uchar unsigned char
#define DEFAULT_PORT 80
#define DEFAULT_PROTO SOCK_STREAM // TCP

int fun();

int main(int argc, char **argv) {

fun();
return 0;
}

int fun()
{
static char Buffer[1024*1024]={0};
char server_name[256]= "www.adintr.com ";
int retval, loopflag=0;
int loopcount,maxloop=-1;

int socket_type = DEFAULT_PROTO;


struct sockaddr_incli_addr;

WSADATA wsaData;
if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) {
fprintf(stderr, "WSAStartup failed with error %d\n ",WSAGetLastError());
WSACleanup();
return -1;
}
SOCKET cli_sock=socket(PF_INET,SOCK_STREAM,0);
if (cli_sock==INVALID_SOCKET){
MessageBox (0, "create socket Error ", 0, MB_OK);
return -1;
}
// connect to server
unsigned short netshort;
if(WSAHtons(cli_sock, DEFAULT_PORT, &netshort))
{
::MessageBox(0, "port error, can 't convert address ", 0, MB_OK);
return -1;
}

struct sockaddr_insrv_addr;
srv_addr.sin_family = AF_INET;
srv_addr.sin_addr.s_addr = inet_addr(server_name);
srv_addr.sin_port= netshort;

if (connect(cli_sock,(LPSOCKADDR)&srv_addr,sizeof(srv_addr))==SOCKET_ERROR){
char errtxt[64];
wsprintf(errtxt, "connection failed\nserver: %s, port: %d,error =%d\n ", server_name, DEFAULT_PORT , WSAGetLastError());
printf ( errtxt);
return -1;
}

char sz[]= "GET / HTTP/1.1\r\nHost:www.adintr.com\r\n\r\n ";
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);
WSACleanup();
return 1;
}

热点排行