WINSOCKD 使用HTTP协议的问题.请进来指点.

yeman 2004-11-13 12:18:24
看到别人写的小程序可以访问网页并提取内容,还可以提交内容.所以也想用VB写个.
下面是我找的一个例子改的.
Option Explicit
Dim strCommand As String
Dim strWebPage As String

Private Sub Command1_Click()
If Winsock1.State <> 0 Then Winsock1.Close
Winsock1.RemoteHost = "61.134.xx.xx" '返回或设置远程计算机,控件向它发送数据或从它那里接收数据。
Winsock1.RemotePort = 80 '返回或设置要连接的远程端口号
Winsock1.Connect '返回与远程计算机的连接。
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Winsock1.Close
End Sub

Private Sub Winsock1_Connect() '当一个 Connect 操作完成时发生。
On Error Resume Next
strWebPage = "http://61.134.xx.xx/BBS/Default.asp"
strCommand = "GET " + strWebPage + " HTTP/1.0" + vbCrLf
strCommand = strCommand + "Accept: */*" + vbCrLf '这句可以不要
strCommand = strCommand + vbCrLf '记住一定要加上vbCrLf

Winsock1.SendData strCommand '给远程计算机发送数据
End Sub

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

//////////////////////////////////////////////////
问题1:
strCommand = "GET " + strWebPage + " HTTP/1.0" + vbCrLf
改为:strCommand = "GET " + strWebPage + " HTTP/1.1" + vbCrLf
不能返回正确的网页,但是用http/1.0提交后服务器返回的头中却显示的是 http/1.1

问题2:
我用httpdebug软件测试论坛首页,返回的页面中显示我使用的端口.我再次提交后还使用的此端口,说明我和服务器的连接并没有中断.
但是我上面的程序,发送数据后,当服务器数据返回完后,对方服务器会主动断开连接.
此时我似乎不能使用Winsock1.SendData,只有close后重新Winsock1.Connect.此时使用的已经不是上次使用的端口了。

问题3:httpdebug中有AotuCookie, 如果用上面的程序有该怎么处理autocookie. 端口改变,服务器返回的cookie也就变了。

请高手指点,谢谢
...全文
1157 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
行云边 2005-01-18
  • 打赏
  • 举报
回复
参考rfc2616吧
ftp://ftp.rfc-editor.org/in-notes/rfc2616.txt


小弟也不是很熟悉 对楼主的问题 只能试着回答,如果不正确不要介意 呵呵

1。可能是 你下面的参数 不符合 HTTP1.1协议吧,导致服务器无法解析。
2。断口一样 不能说明没有断开连接啊 ,另外 好像有一个叫keep-alive 的参数,不知道是不是这个问题。
3。cookie 跟连接有没有断没有关系的,如果服务器设置了cookie 或者在asp使用了session,都会在http头里返回一个cookie值的。你只要读取这个值,然后发送下一个数据请求的时候在http头上加上cookie 参数,这样就可以了。
VBDN 2005-01-18
  • 打赏
  • 举报
回复
帮你顶
yeman 2004-11-13
  • 打赏
  • 举报
回复
用Winsock更能了解HTTP.

下面是<<TCPIP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议>>关于HTTP协议的一段文字:
//////////////////////////////
[Padmanabhan 1995]和[Mogul 1995b]中建议客户与服务器保持一个打开的T C P连接,而
不是服务器在发出响应后关闭连接。当服务器知道生成的响应报文的长度时才可以这样做,
回想前面1 3 . 3 . 4节中我们提到的例子, C o n t e n t - L e n g t h报文首部中指出G I F图象的大小。
否则,服务器必须通过关闭连接来为客户程序指出响应的结尾。对协议作这样的修改必须同
时修改客户端和服务器端。客户端规定Pragma: hold-connection 报文首部,提供向后
兼容的能力。如果服务器不能识别这种P r a g m a,就会忽略它,然后在发送完响应后关闭连接。
这种P r a g m a允许新客户程序在尽可能情况下保持连接,同时访问新的服务器,还允许现有所
有客户和服务器交互操作。
H T P P协议的下一版本(版本1 . 1 )中可能会支持持续的连接,虽然具体怎么做可能
会有变化。
在这里我们实际上提到了当前定义的三种服务器结束响应的方法。最好的办法
是使用C o n t e n t - L e n g t h报文首部,其次是服务器发送一个带有boundary = 属
性的C o n t e n t - T y p e报文首部([Rose 1993]的6 . 1 . 1节中给出了怎样使用这种属性的例
子,但是并非所有的客户程序都支持这种特性)。最差的选择(但最广泛运用的)便是
服务器关闭连接
/////////////////////////////////
但是我使用HTTP/1.1时,服务器不接受,但服务器返回的确是HTTP/1.1 :(
helanshan 2004-11-13
  • 打赏
  • 举报
回复
up
yas 2004-11-13
  • 打赏
  • 举报
回复
用Inet吧

1,502

社区成员

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

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