【问题标题】:classic asp page httprequest on aspx page?aspx页面上的经典asp页面httprequest?
【发布时间】:2017-10-11 18:37:54
【问题描述】:

我很难找到一种在经典中使用 httprequest 从同样调用请求的 aspx 中提取数据的方法。

经典代码:

    HostURL = "https://URL"
    NetURL = "middle.aspx?HostURL=" & HostUR

    Dim oXMLHTTP
    Dim strStatusTest

    Set oXMLHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")

    oXMLHTTP.Open "POST", NetURL, False
    oXMLHTTP.Send
    strStatusText = oXMLHTTP.responseText 

netURL aspx 代码

private void Page_Load(object sender, System.EventArgs e){
    String host = getParam();
       HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(host);
        HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();

    String cc;
        using (Stream stream = response.GetResponseStream())
       {
          StreamReader reader = new StreamReader(stream, Encoding.UTF8);
          cc = reader.ReadToEnd();
       }       
    Response.Write(cc);
}

所以我试图做的是当我从经典调用 aspx 页面时,加载的 aspx 获得一个我需要 asp 页面拥有的密钥。

aspx 代码工作正常,它确实检索了我需要的密钥。

附加信息:我们关闭了 TLS 1.0,经理不想进行注册表修复。我也是一个非常初级的程序员,所以这甚至可能行不通,我不知道。

提前感谢您的任何帮助。

【问题讨论】:

  • 实际问题是什么?您是否收到错误报告?
  • 经典代码第 2 行存在语法错误,NetURL 设置为https://URL 值得怀疑。另外,由于您不发送任何数据,我建议您使用 GET 而不是 POST。我经常在经典 ASP 中使用 XMLHTTP,它运行良好。

标签: asp.net vbscript asp-classic


【解决方案1】:

您的代码存在一些问题

正如 JohnRC 的评论所指出的 - https://URL 是可疑的。我假设您已将其替换为您不想在此论坛上显示的实际 URL。

NetURL 需要是绝对 URL,即

NetURL = "http://www.yourdomain.com/middle.aspx?HostURL=" & HostURL

另外,在您提供的代码中,您在第二行的 HostURL 末尾留下了“L”,如果这是在您的实际代码中,那么显然该变量不会传递给您的aspx 页面。

最后,这不是错误,但我建议使用 MSXML2.ServerXMLHTTP.6.0 而不是 3.0 - 它调用最新版本的 MSXML

【讨论】:

    【解决方案2】:

    我不评论为什么以及为什么不这样做......但我有一个很好的用例。 我写了一个库,从那时起就有 100 多个经典 ASP 页面(从 1998 年到 2005 年)使用它。 该库处理和包装 FileSystemObject。但是在较新的操作系统中,我遇到了很多 mappings 问题。所以我决定开始使用这个库的 ASPX 版本(在很多 ASPX 中使用 :-)。 因此,我通过在 lib 的主目录中添加“在此请求上执行此功能”代码,将 ASPX 库转换为 POST Web 服务。 然后我重写了 FSO.inc 以使用 ServerXMLHTTP 调用 FSO.ASPX,并请求写入/读取/删除/任何文件。 到目前为止,没有任何问题... 在 ASPX 中,在我的公共共享全局类 FSO 下方:

    <%
    Select Case UCase(Current.Request("f"))
    Case "READALL":     Response.write( FSO.ReadAll(Current.Request("filename")) )
    Case "FILEEXISTS":  Response.write( FSO.FileExists(Current.Request("filename")) )
    End select
    %>
    

    然后在 FSO.inc 中:

    function CallFSO(exec)
        Dim objSrvHTTP
        Set objSrvHTTP = Server.CreateObject ("MSXML2.ServerXMLHTTP")
        objSrvHTTP.SetProxy 1
        objSrvHTTP.open "POST", "http://.......your server..../FSO.aspx", False
        objSrvHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
        objSrvHTTP.send exec
        IF objSrvHTTP.status = 200 Then CallFSO = objSrvHTTP.responseText
        Set objSrvHTTP = nothing
    End function
    
    FUNCTION ReadAll(Filename)
        ReadAll = CallFSO( "f=readAll&FileName=" & filename)
    End function
    
    Function FileExists(Filename)
        FileExists = instr(CallFSO( "f=FileExists&FileName=" & filename), "True") > 0
    End Function
    

    也许不是最充分的解决方案,但如果您有大量的 ASP,并且没有资源来重写它,那么这可行...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 2023-03-09
      相关资源
      最近更新 更多