用WINSOCK下载网页的问题(此类问题已发N遍,知情者必进)
使用控件有: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




