6920|27

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助:网页下载 [复制链接]

我在evc的模拟器上下载网页,编程中用到套接字,代码如下:
WSADATA  wsaData;  
if(  WSAStartup(MAKEWORD(2,0),  &wsaData)  
? ?  LOBYTE(wsaData.wVersion)!=  2  )  
return;        
///创建SOCKET对象  
SOCKET  sock  =  socket(AF_INET,  SOCK_STREAM, IPPROTO_TCP  ); //  ppe->p_proto
if(sock  ==  INVALID_SOCKET)  
return;         
///根据主机名获得IP地址  
hostent*  pHostEnt=gethostbyname("www.google.com");  
if(pHostEnt==NULL){  
return;  
}
但是上述代码仅可以下载像www.google.com的可以获取主机名的网页,而不能下载
像sports.sina.com.cn/basketball/的网页,用上面的方法可以吗? 如果不可以,不知道那位高手有办法可
以在evc模拟器上下载给定url例如:http//sports.sina.com.cn/basketball/的网页,还请指点一下.
谢谢!!

最新回复

我建一个文件,将buf中内容写入其中,我觉得也因该可以查看buf中内容。 不知道这样可行?还请您指点一下,谢谢  详情 回复 发表于 2008-8-26 18:05
点赞 关注

回复
举报

62

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这个你要去了解下http协议,最好使用wininet的Http系列函数,会比较简单.
你给的这段代码只是获得了网页的ip地址,其后还要connect,发送一个http请求
根据服务器回复的http头,下载网页内容.
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
后面的那段是:
int   nTime   =   10000;   
setsockopt(sock,   SOL_SOCKET,   SO_SNDTIMEO,   (char*)&nTime,   sizeof(nTime));   
setsockopt(sock,   SOL_SOCKET,   SO_RCVTIMEO,   (char*)&nTime,   sizeof(nTime));      
///连接   
struct   in_addr   ip_addr;   
memcpy(&ip_addr, pHostEnt->h_addr_list[0],  4);///h_addr_list[0]里4个字节,每个字节8位      
struct   sockaddr_in   destaddr;   
memset((void   *)&destaddr,   0,   sizeof(destaddr));     
destaddr.sin_family   =   AF_INET;   
destaddr.sin_port   =   htons(80);   
destaddr.sin_addr   =   ip_addr;   
   
if(   0   !=  connect(sock,   (struct   sockaddr*)&destaddr,   sizeof(destaddr))   )   
return;   

///格式化请求   
char   request[]   =   
"GET   /   HTTP/1.1\r\n"   
// "GET   /book/2132/zip/gb.zip   HTTP/1.1\r\n"   
// "Host:read.hjsm.net\r\n"   
"Host:sports.sina.com.cn\r\n"   
"Accept:*/*\r\n"   
//"Referer:   http://sports.sina.com.cn/basketball.htm\r\n "   
"User-Agent:Mozilla/4.0   (compatible;   MSIE   5.00;   Windows   98)\r\n"   
// "Range:   bytes=0-\r\n"   
"Pragma:   no-cache\r\n"   
"Cache-Control:   no-cache\r\n"   
"Connection:Close\r\n\r\n";   
// "Connection:Keep-Alive\r\n\r\n";   
   
///发送请求   
if(   SOCKET_ERROR   ==   send(sock,   request,   strlen(request),   0)   )   
return;   
   
//---------Response----------   
// HTTP/1.1   200   OK   
// Date:   Wed,   02   Feb   2005   08:42:09   GMT   
// Server:   Apache   
// Last-Modified:   Mon,   24   Jan   2005   13:17:07   GMT   
// ETag:   "37a9ef-7635b-459bac0"   
// Accept-Ranges:   bytes   
// Content-Length:   484187   
// Connection:   close   
// Content-Type:   application/zip   
   
// Transfer-Encoding:   chunked -   当有该行存在时,content会是分块传送,每块有一个头,格式:"[16进制块大小,string]\r\n"   
   
int   rcv_bytes   =   0;   
char   buf[2049]   =   {0,};   
CFile  file(_T("\\Windows\\File.txt"),CFile::modeReadWrite|CFile::modeCreate);
while(1)   
{   
rcv_bytes   =recv(sock,   buf,   2048,   0);   
if(   rcv_bytes   <=   0   )   
break;      
//ofs.write(buf,   rcv_bytes);
file.Write(buf,rcv_bytes);  
break;   
}   
file.Close();      
closesocket(sock);      
WSACleanup();
但好像这段也没有可改的地方。
还请各位高手指点。         
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
上面代码我试了,也下载不了网页内容,不知道那位高手知道怎么改?还请明示一下。
谢谢!
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

5
 
"GET  sports.sina.com.cn/basketball/  HTTP/1.1\r\n"  
"Host:sports.sina.com.cn\r\n"  

发送这个不行吗?
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢
不过,不行,改了后跟改之前得到的内容几乎一样。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
你是单步跟的,还是直接看文件的。

我用这种方法是可以下载整个页面的。

你先试试:
"GET www.sina.com.cn HTTP/1.1\r\n"  
"Host:www.sina.com.cn\r\n"  

看返回是什么
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

8
 
我是直接看文件的,但下载的好像不是页面。
改了后下载下来的结果和在pc上打开此网页保存后再用txt打开的内容不一样。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
什么不一样?
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

10
 
我的格式化请求用的代码如下:
char   request[]   =   
"GET www.sina.com.cn HTTP/1.1\r\n"  
"Host:www.sina.com.cn\r\n"   
// "GET   /book/2132/zip/gb.zip   HTTP/1.1\r\n"   
// "Host:read.hjsm.net\r\n"   
//"Host:sports.sina.com.cn\r\n"   
"Accept:*/*\r\n"   
//"Referer:   http://sports.sina.com.cn/basketball.htm\r\n "   
"User-Agent:Mozilla/4.0   (compatible;   MSIE   5.00;   Windows   98)\r\n"   
// "Range:   bytes=0-\r\n"   
"Pragma:   no-cache\r\n"   
"Cache-Control:   no-cache\r\n"   
"Connection:Close\r\n\r\n";   
// "Connection:Keep-Alive\r\n\r\n";
请问lenux你下载的页面和在pc上打开www.sina.com.cn网页保存后再用txt打开的内容一样吗?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

11
 
是在pc上打开www.sina.com.cn网页然后  文件——〉保存  后在用txt打开
好像这样做和在模拟器上模拟的结果不一样。
我的qq是403976434,冒昧问一下lenux能不能用qq向你请教一下这个问题?
如果方便的话,加一下我。谢谢
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

12
 
打开\\Windows\\File.txt后上面内容中好像有些是提示错误的。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

13
 
公司不能用qq。
eeworld消息可以用。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

14
 
我打开\\Windows\\File.txt文件后上面指出如下:权力受限等连接失败。txt中部分内容如下

therequested url could not be retrived


while tring to retrive the url: http:/ /sports.sina.com.cn/basketball/

The following error was encountered;

  • access denied.

    Access control configuration prevents your request from being allowed at this time. please contact your service provider if you feel this is incorrect 还请哪位高手指点一下。 谢谢

 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

15
 
你可以下载一个wireshark,拦截http命令的。

然后你在pc上用ie访问你要查看的页面,看ie发送的是什么样的http命令,
然后你使用ie的http命令来在socket中发送就行了。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

16
 
char  request[]  =  
"GET http://sports.sina.com.cn/basketball/ HTTP/1.1\r\nHost:http://sports.sina.com.cn/basketball/\r\nAccept:*/*\r\n"  
试试。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

17
 
行,我换了试试。谢谢你
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

18
 
lenux你好,我换成:
char request[] =
"GET http://sports.sina.com.cn/basketball/ HTTP/1.1\r\nHost:http://sports.sina.com.cn/basketball/\r\nAccept:*/*\r\n"
后模拟器经常成死机状态,并且我用下面语句控制。
int rcv_bytes = 0;
char buf[2049] = {0,};
CFile file(_T("\\Windows\\File.txt"),CFile::modeReadWrite|CFile::modeCreate);
//while(1)
for(int i=0;i<1;i++)
{
rcv_bytes = recv(sock, buf, 2048, 0);
if( rcv_bytes <= 0 ){
MessageBox(_T ("Error2"),
_T ("Error2"), MB_ICONINFORMATION | MB_OK);
break;
}
file.Write(buf,rcv_bytes);
break;
}
file.txt中写入字符,也是同样经常模拟器进入死机状态。
不知道是怎么回事?如果你方便还麻烦你试着模拟一下,谢谢!
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

19
 

  1. char  request[]  =  
  2.                 "GET http://sports.sina.com.cn/basketball/ HTTP/1.1\r\n"  
  3.                 // "GET  /book/2132/zip/gb.zip  HTTP/1.1\r\n"  
  4.                 // "Host:read.hjsm.net\r\n"  
  5.                 "Host:sports.sina.com.cn\r\n"
  6.                 "Accept:*/*\r\n"
  7.                 //"Referer:  http://sports.sina.com.cn/basketball.htm\r\n "  
  8.                 //"User-Agent:Mozilla/4.0  (compatible;  MSIE  5.00;  Windows  98)\r\n"  
  9.                 //// "Range:  bytes=0-\r\n"  
  10.                 //"Pragma:  no-cache\r\n"  
  11.                 //"Cache-Control:  no-cache\r\n"  
  12.                 //"Connection:Close\r\n\r\n";  
  13.          "Connection:Keep-Alive\r\n\r\n";  
复制代码


收到的buf为

HTTP/1.1 200 OK
Date: Tue, 26 Aug 2008 06:56:02 GMT
Server: Apache/2.0.63 (Unix)
Last-Modified: Tue, 26 Aug 2008 06:46:53 GMT
ETag: "afb0-4555744e1b140"
Accept-Ranges: bytes
X-Powered-By: mod_xlayout_jh/0.0.1vhs.markII.remix
Cache-Control: max-age=60
Expires: Tue, 26 Aug 2008 06:57:02 GMT
Very: Accept-Encoding
Content-Type: text/html
X-Cache: HIT from us-cn4.sina.com.cn
Powered-By-ChinaCache: USA-NE-1-3D3 HIT
Content-length: 62497
Connection: Keep-Alive








篮球_NIKE新浪竞技风暴_新浪网




您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved