CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  网络编程

用WINSOCK下载网页的问题(此类问题已发N遍,知情者必进)

楼主daydayupo(天天向上噢)2005-02-03 23:54:33 在 VB / 网络编程 提问

使用控件有:Winsock控件,CommandButton   控件,TextBox   控件  
  编程步骤如下:  
  1.首先声明变量  
  Dim   strCommand   As   String  
  Dim   strWebPage   As   String  
  2.把如下代码加到Command1的Command1_Click事件:  
  Private   Sub   Command1_Click()  
  Winsock1.RemoteHost   =   "www.163.com"   '设置连接的网址  
  Winsock1.RemotePort   =   80   '设置要连接的远程端口号  
  Winsock1.Connect   '返回与远程计算机的连接。  
  End   Sub  
  3.把如下代码加到Winsock1的Connect事件:  
  Private   Sub   Winsock1_Connect()   '当一个   Connect   操作完成时发生  
  On   Error   Resume   Next  
  strWebPage   =   "http://www.163.com/index.html"   '要下载的文件  
  strCommand   =   "GET   "   +   strWebPage   +   "   HTTP/1.0"   +   vbCrLf   ''GET   为FTP命令   取得文件  
  strCommand   =   strCommand   +   "Accept:   */*"   +   vbCrLf   '这句可以不要  
  strCommand   =   strCommand   +   "Accept:   text/html"   +   vbCrLf   '这句可以不要  
  strCommand   =   strCommand   +   vbCrLf   '记住一定要加上vbCrLf  
  'Debug.Print   strCommand   '注:你可以用Debug.Print   strCommand   来查看一下格式  
  Winsock1.SendData   strCommand   '给远程计算机发送数据    
  End   Sub  
  4.把如下代码加到Winsock1的DataAmival事件:  
  Private   Sub   Winsock1_DataArrival(ByVal   bytesTotal   As   Long)   '取得数据时产生该事件  
  On   Error   Resume   Next   '在错误处理程序结束后,恢复原有的运行  
  Dim   webData   As   String  
  Winsock1.GetData   webData,   vbString   '检取当前的数据块  
  Text1.Text   =   Text1.Text   +   webData  
  End   Sub  
  ----------------------------------------------  
  通过一上代码,可以把index.html的内容显示到text1.text中!  
   
  这是正常的,但...有一个问题就是  
  这样并不能显示  
  http://www.xxxxx.com/url.asp  
  中的结果!  
  url.asp文件内容是:  
  -------------  
  <%  
  response.redirect("http://www.xxxxx.com/body.asp")  
  %>  
  -------------  
  这里是转向到body.asp中了,正确用IE访问http://www.xxxxx.com/url.asp  
  后就会跳转到http://www.xxxxx.com/body.asp再把这里的内容输出,用以上代码访问这样的网页,好像就是返回(下载)不了...内容!(会出错噢)  
  这也类似通过某连接去下载文件的页面,FLASHGET是会做到的(当然它可能不是WINSOCK),但我相信,WINSOCK应该能把这内容下载下来吧?可能就是在strCommand   里的..参数问题,也许我不知道,也许...  
   
  请高手指教! 问题点数:30、回复次数:22Top

1 楼warran()回复于 2005-02-04 00:25:04 得分 1

Text1.Text   =   Text1.Text   +   webData  
  显示原文件?  
  用inet更方便Top

2 楼warran()回复于 2005-02-04 00:25:38 得分 1

strUrl   =   Inet1.OpenURL(URL)Top

3 楼daydayupo(天天向上噢)回复于 2005-02-04 10:14:41 得分 0

呵呵,我也知道...此问题对inet方便...但,我的程序中,必须得用winsock!所以.....Top

4 楼qscandwh(思成)回复于 2005-02-04 10:29:11 得分 0

dingTop

5 楼qscandwh(思成)回复于 2005-02-04 10:35:21 得分 3

http://blog.csdn.net/lvlvlvlylyly/archive/2004/05/29/15582.aspxTop

6 楼pikachu8guan(30度仰角 (www.vbgood.com 新手学堂 Manager))回复于 2005-02-04 10:36:40 得分 5

可以参考下flashget的下载过程  
   
  Fri   Feb   04   10:35:19   2005   正在连接   jupiterd.mofile.com:80  
  Fri   Feb   04   10:35:19   2005   正在连接   jupiterd.mofile.com   [IP=220.170.79.13:80]  
  Fri   Feb   04   10:35:20   2005   已连接.  
  Fri   Feb   04   10:35:20   2005   GET   /1091084337719417/0820147488580524/2/4982A052D7DF0F6502FEFDDA1640BA5E/feel.rar   HTTP/1.1  
  Fri   Feb   04   10:35:20   2005   Host:   jupiterd.mofile.com  
  Fri   Feb   04   10:35:20   2005   Accept:   */*  
  Fri   Feb   04   10:35:20   2005   Referer:   http://solar.mofile.com/docs/PickupHandler.do?pickupcode=1091084337719417&action=pickupResult  
  Fri   Feb   04   10:35:20   2005   Cookie:   uname=pikachu8guan  
  Fri   Feb   04   10:35:20   2005   User-Agent:   Mozilla/4.0   (compatible;   MSIE   5.00;   Windows   98)  
  Fri   Feb   04   10:35:20   2005   Range:   bytes=58839596-  
  Fri   Feb   04   10:35:20   2005   Pragma:   no-cache  
  Fri   Feb   04   10:35:20   2005   Cache-Control:   no-cache  
  Fri   Feb   04   10:35:20   2005   Connection:   close  
  Fri   Feb   04   10:35:21   2005   HTTP/1.1   404   File   isn't   exist.  
  Fri   Feb   04   10:35:21   2005   Date:   Fri   Feb   04   10:39:34   CST   2005  
  Fri   Feb   04   10:35:21   2005   Content-Length:   4416  
  Fri   Feb   04   10:35:21   2005   Content-Type:   text/html;charset=utf-8  
  Fri   Feb   04   10:35:21   2005   Server:   High   Performence   Server   1.1  
  Top

7 楼yas(新一代的矿工)回复于 2005-02-04 10:41:05 得分 2

研究Http   传输协议吧~~~~~~~Top

8 楼homezj(小吉)回复于 2005-02-04 11:24:16 得分 3

呵呵!Winsock下载的只是index.html的内容,至于其中Html代码的含义,它可是一概貌不知呀,平常Html代码都是IE帮你解释的,Top

9 楼homezj(小吉)回复于 2005-02-04 11:26:33 得分 4

误发了!  
  你用Winsock,就需自己解释Html代码,不用控件,有些难哟!  
  当然,你可能并不需解释全部Html代码,只提出自己需要的,要简单得多。前提是:格式相对固定。Top

10 楼daydayupo(天天向上噢)回复于 2005-02-04 14:43:45 得分 0

TO   qscandwh(思成):似乎没看明白,再看看!  
   
  TO   pikachu8guan(30度仰角   (www.vbgood.com   新手学堂   Manager))   :好注意,我试试  
   
  TO     yas(新一代的矿工)   :具体是指?  
   
  TO   homezj(小吉)   :没理解到你的意思,你说得太深奥了!Top

11 楼potato015(三流火枪手)回复于 2005-02-04 14:48:59 得分 3

你所收到的HTML   源码   是跳转指令  
  你需要自己进行解释  
  Top

12 楼daydayupo(天天向上噢)回复于 2005-02-04 14:58:44 得分 0

不会啊.收到的HTML源码,成了:  
   
  <h1>Bad   Request   (Invalid   URL)</h1>  
   
  之类的了,根本没有根据什么跳转了,再说,我该怎么进行跳转呢?Top

13 楼aijie099(罗漫年华)回复于 2005-02-04 15:12:58 得分 3

<%  
  response.redirect("http://www.xxxxx.com/body.asp")  
  %>  
  //你收到的应该是,“http://www.xxxxx.com/body.asp”对吧。  
  你收到这样的,再连接这个网址就行了呀。  
  Top

14 楼daydayupo(天天向上噢)回复于 2005-02-04 15:19:48 得分 0

就是没有收到这地址嘛!怪事Top

15 楼daydayupo(天天向上噢)回复于 2005-02-04 15:36:28 得分 0

之前测试,是把文件头去掉了,所以...呵呵..  
   
  HTTP/1.1   302   Object   moved  
  Connection:   close  
  Date:   Fri,   04   Feb   2005   07:35:33   GMT  
  Server:   Microsoft-IIS/6.0  
  X-Powered-By:   ASP.NET  
  Location:   http://www.vssky.net/soft/soft.asp  
  Content-Length:   158  
  Content-Type:   text/html  
  Set-Cookie:   ASPSESSIONIDCCTSTQDS=DBONFCJBIICCIHGJFIKPOPEK;   path=/  
  Cache-control:   private  
   
  <head><title>Object   moved</title></head>  
  <body><h1>Object   Moved</h1>This   object   may   be   found   <a   HREF="http://www.vssky.net/soft/soft.asp">here</a>.</body>  
   
  内容在些!  
   
  谢谢大家了噢.Top

16 楼daydayupo(天天向上噢)回复于 2005-02-04 16:17:56 得分 0

还有一个问题,就是:  
   
  什么样的情况下,会导致:用IE可以访问的URL,在WINSOCK返回的却是:  
  HTTP/1.0   404   Not   Found  
   
  比如:http://www.vssky.org/edition/list.asp  
  用WINSOCK却是404..为什么呢?服务器限制?还是???  
   
  有没有办法...通过代码解决此问题?Top

17 楼tony_dagoo()回复于 2005-02-04 16:53:06 得分 2

改用xmlhttp好多了.Top

18 楼daydayupo(天天向上噢)回复于 2005-02-04 17:01:31 得分 0

呵呵,VB用xmlhttp要引用什么?  
   
   
  另者...去除  
  HTTP/1.1   302   Object   moved  
  Connection:   close  
  Date:   Fri,   04   Feb   2005   07:35:33   GMT  
  Server:   Microsoft-IIS/6.0  
  X-Powered-By:   ASP.NET  
  Location:   http://www.vssky.net/soft/soft.asp  
  Content-Length:   158  
  Content-Type:   text/html  
  Set-Cookie:   ASPSESSIONIDCCTSTQDS=DBONFCJBIICCIHGJFIKPOPEK;   path=/  
  Cache-control:   private  
   
   
  这样的头,最有效,最快捷,最实用,最.....那个的方法是?Top

19 楼daydayupo(天天向上噢)回复于 2005-02-04 20:23:20 得分 0

怎么...没有告诉我了?呵呵Top

20 楼homezj(小吉)回复于 2005-02-04 22:18:34 得分 2

分割HTTP头部与内容的是两个换行(vbCrLf   &   vbCrLf)。用Split可以,用Instr也行,都很快。  
  Top

21 楼qyii(劳心劳力)回复于 2005-02-05 01:20:17 得分 1

哈哈!  
  <%  
  response.redirect("http://www.xxxxx.com/body.asp")  
  %>  
  我想下载到这个都下载不到!不知楼主怎么搞的,还是服务器坏了!  
   
  服务器会把ASP源文件返回?那可是件大事呐...  
  老实,快把问题说清楚...Top

22 楼daydayupo(天天向上噢)回复于 2005-02-05 12:11:45 得分 0

看来,还是用instr的方法.强吧??  
   
  也只有这样了...呵呵!Top

相关问题

  • 网页中实现n级树?
  • 知情者请止步:IIS应用程序和ASP
  • 现在华为还社招吗?知情者请进
  • 虽是题外之问,还请知情者据实以告~!
  • 哪有《Inside DirectX》(中文版)望知情者告知
  • 哪里可以下到vb.net.知情者有分
  • 被window.ShowModalDialog弄得好苦恼,特请知情者相助...
  • 在ASP中调用netmeeting(知情者请进)
  • 还是static text的问题求知情者透露一下
  • 数据精度问题,,,知情者解答

关键词

  • .net
  • asp.net
  • 问题
  • object

得分解答快速导航

  • 帖主:daydayupo
  • warran
  • warran
  • qscandwh
  • pikachu8guan
  • yas
  • homezj
  • homezj
  • potato015
  • aijie099
  • tony_dagoo
  • homezj
  • qyii

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo