现有服务器http://123.45.67.89:200/a.htm,我想请求一下这个页面,然后分析返回结果。
我用winsock.conn "123.45.68.89",200
已经连结好,在winsock_connect中已经看到winsock.state=7(已连接),接下来发送请求时:
        strData = "GET /a.htm HTTP/1.1" & vbCrLf
    strData = strData & "Host: 123.45.67.89" & vbCrLf
    strData = strData & "Accept: */*" & vbCrLf
    strData = strData & "User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)" & vbCrLf
    strData = strData & "Pragma: no -cache" & vbCrLf
    strData = strData & "cache -Control: no -cache" & vbCrLf
    strData = strData & "Connection: Close" & vbCrLf & vbCrLfWinsock.SendData strData
之后检查winsock.state=7
但是在winsock_dataArrival中应该收到该网页的内容,但现在却收到:
HTTP/1.1 400 Bad Request
Content-Type: text/html
Date: Mon, 24 Jul 2006 04:44:16 GMT
Connection: close
Content-Length: 39<h1>Bad Request (Invalid Hostname)</h1>其中的系统时间明显是错误的,但是我仔细问过了,该系统时间既不是主机123.45.67.89的时间,也不是我的机器的时间,究竟是谁的时间我也不知道,为什么不能返回正确的信息呢?

解决方案 »

  1.   

    服务器不认识你的请求。根据http协议,详细检查一下吧
      

  2.   

    Invalid Hostname
    目标主机名无效
      

  3.   

    问题是这样的,因为web服务器的网页的端口不是默认的80端口,所以我在写host是应该写成:
        strData = strData & "Host: 123.45.67.89 200" & vbCrLf
    不知是不是这样写?
      

  4.   

    还是老话
    用抓包工具看
    到底是什么格式才行
     strData = strData & "Host: 123.45.67.89:200" & vbCrLf
    理论上可能是这样
      

  5.   

    现在我把 strData = strData & "cache -Control: no -cache" & vbCrLf一句屏蔽掉就没问题了,我不知道究竟是怎么回事儿?