求救:winsock下载网页的问题??

zebulon 2004-10-05 09:52:00
我写了一个下载网页的程序,为什么总是返回一个"访问的网页不存在"的html页面呢??
请看我的代码:
Option Explicit

'其中,txtRemoteHost.text="www.sohu.com"

Private Sub cmdDownload_Click()
If wsClient.State = sckOpen Then wsClient.Close

wsClient.RemoteHost = "http://" & Trim(txtRemoteHost.Text)
wsClient.RemotePort = 80
wsClient.Connect

If wsClient.State = sckConnected Then
MsgBox "已连接到服务器."
Else
Exit Sub
End If

End Sub



Private Sub wsClient_Connect()
' Dim strRemoteHost As String
Dim strHttpRequest As String
Dim strWebPage As String

strWebPage = "http://" & Trim(txtRemoteHost.Text) & "/index.html"

strHttpRequest = "GET " & strWebPage & vbCrLf

strHttpRequest = strHttpRequest & "Accept: */*" & vbCrLf

strHttpRequest = strHttpRequest & "Accpet: text/html" & vbCrLf
strHttpRequest = strHttpRequest & vbCrLf

Debug.Print strHttpRequest

wsClient.SendData strHttpRequest
End Sub

Private Sub wsClient_DataArrival(ByVal bytesTotal As Long)
Dim strData As String

wsClient.GetData strData, vbString
Debug.Print strData
Open "d:\123.htm" For Output As #1
Write #1, strData
Close #1
End Sub

...全文
182 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovebanyi 2005-02-25
  • 打赏
  • 举报
回复
问一个问题啊.. 我要成一个组件..该什么引用这个Winsock啊..
在控件.和windows的程序是可以直接部件 然后拉到界面的框中就行了.可是组件的哪个是没有界面的.不能拉进来的.该什么定义.
zebulon 2005-02-25
  • 打赏
  • 举报
回复
wsClient是Winsock控件的名字
homezj 2005-02-25
  • 打赏
  • 举报
回复
有问题的地方不少,有一条是明显的:
RemoteHost是指定域名或IP地址,不能加Http://,这Url的协议头,不是域名的一部分,所以必须去掉!

Url还要注意一个非法字符问题(你这里好象不存在),有些字符包括中文字符都不能在Url中出现,一般可自己写个函数,将这些符转换成%前导的16进制值的形式,如“%AD%8B”等,平常这些事,IE自动帮你做了,但自己写程序时,没程序会帮你自动转换的!

加上“HTTP/1.1”或 “HTTP/1.0”都行,也比较好,但不是必须的

"GET "后面,是"/index.html",还是"http://域名/index.html"样式,并不一定,这跟主机设置有关,一般虑拟主机是必须用"http://域名/index.html"样式的
lovebanyi 2005-02-25
  • 打赏
  • 举报
回复
我试了一下本地的服务器是可以得到的..所以应该是域名的问题.
lovebanyi 2005-02-25
  • 打赏
  • 举报
回复
wsClient这个未定义啊.兄弟你少写了哪个啊.把代码给全啊.让我试试啊.我想要这样的代码啊
elongnet618 2004-10-19
  • 打赏
  • 举报
回复
关注
XmagicX 2004-10-09
  • 打赏
  • 举报
回复
UP
tuyueje 2004-10-09
  • 打赏
  • 举报
回复
strWebPage = "http://" & Trim(txtRemoteHost.Text) & "/index.html" '去掉前面的 http://

strHttpRequest = "GET " & strWebPage & vbCrLf ‘应该是 "GET" & strwebpage & "HTTP 1.0" & vbCrlf

strHttpRequest = strHttpRequest & "Accept: */*" & vbCrLf

strHttpRequest = strHttpRequest & "Accpet: text/html" & vbCrLf
strHttpRequest = strHttpRequest & vbCrLf
作以上的修改试试看。
xldata 2004-10-08
  • 打赏
  • 举报
回复
/---------------------
mbqbaisha(浩云) ( ) 信誉:100
wsClient.RemoteHost = "http://" & Trim(txtRemoteHost.Text)
去掉http://试试看.
比如要下载http://community.csdn.net/Expert/topic/3428/3428298.xml?temp=.2041132
这个网页~~
wsClient.RemoteHost ="community.csdn.net"
这个试一下看看~~
/
对啊,加上HTTP://后应该无法解析

GET后面要加HTTP/1.0或HTTP/1.1

vbCrLf是VB常量,不用定义

不要在DateArrival中保存到文件,可以先保存到一个变量,比如mstrGetData,当下载完成时会触发Close事件,此时再去掉mstrGetData里面的HTTP文件头(文件头以vbCrLf & vbCrLf结束),然后保存到文件。
另外注意如果下载过程中网络出错,下载的文件可能不完全,所以最好保存的时候判断一下下载的大小与文件头中的Content-Length是否一致,否则断点请求(range)或重新下载。
mbqbaisha 2004-10-08
  • 打赏
  • 举报
回复
wsClient.RemoteHost = "http://" & Trim(txtRemoteHost.Text)
去掉http://试试看.
比如要下载http://community.csdn.net/Expert/topic/3428/3428298.xml?temp=.2041132
这个网页~~
wsClient.RemoteHost ="community.csdn.net"
这个试一下看看~~
lxcc 2004-10-06
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=82404
super852 2004-10-06
  • 打赏
  • 举报
回复
好像有个地方不太对,不知道是不是这个原因。就是这个地方:

strWebPage = "http://" & Trim(txtRemoteHost.Text) & "/index.html"

strHttpRequest = "GET " & strWebPage & vbCrLf


GET后面不用加上整个URL,而且,后面还要有个HTTP/1.1

改成这样:strHttpRequest = "GET /index.html HTTP/1.1"& vbCrLf

如果是默认文件可以 GET / HTTP/1.1

vbCrLf这个变量(或常量),我在好多文章中都见人用过。可我不知道是在哪里定义的,好像不是VB本身的常量吧。我一直都用vbnewline ,想当于chr(13) & chr(10)
小弟也是班门弄斧,说的不对请不要骂我哟。
zebulon 2004-10-05
  • 打赏
  • 举报
回复
UP

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧