腾讯云托管与本地测试 GET请求获取返回值 完全不同

我在腾讯云托管使用express.js环境,上传基于nodejs的代码,代码的内容为GET http://bbs.sdgun.com.cn/forum.php?mod=viewthread&tid=1462716&mobile=1

获得类似于下列的返回结果:

<script type="text/javascript">a6I6=function(){'a6I6';var _a=function(){return 'e'}; return _a();};In=function(){'In';var _I=function(){return 'm'}; return _I();};function t1v(t1v_){function mo(){return getName();};return mo();return 't1v'}function Gp(){'return Gp';return '1'}function Wf(Wf_){function n(){return getName();};return n();return 'Wf'}hcCZ=function(){'hcCZ';var _h=function(){return 'oru'}; return _h();};_LbAKm = 'href';function x1(){'return x1';return '8'}function Izcq(){'return Izcq';return '&_d'}oR4=function(oR4_){'return oR4';return oR4_;};Y44=function(Y44_){var _Y=function(Y44_){'return Y44';return Y44_;}; return _Y(Y44_);};_NZW9f = location;y860=function(){'return y860';return 'od=';};Cv=function(){'Cv';var _C=function(){return '5'}; return _C();};Pa=function(){'return Pa';return '6';};Qx=function(){'Qx';var _Q=function(){return '&'}; return _Q();};yX='5';_b1VDG = 'replace';_MXa8j = 'assign';function h5(h5_){function t(){return getName();};return t();return 'h5'}_f9i48 = window;function getName(){var caller=getName.caller;if(caller.name){return caller.name} var str=caller.toString().replace(/[\s]*/g,"");var name=str.match(/^function([^\(]+?)\(/);if(name && name[1]){return name[1];} else {return '';}}Lj=function(){'Lj';var _L=function(){return 'm'}; return _L();};aS=function(){'aS';var _a=function(){return 'g'}; return _a();};Tv='h';nh=function(){'nh';var _n=function(){return '7'}; return _n();};zj=function(){'return zj';return 'v';};bdAO=function(){'return bdAO';return 'id=';};d0='b';location[_b1VDG]((function(BEc_){return (function(BEc_){return BEc_;})(BEc_);})('/f')+hcCZ()+Lj()+'.p'+Tv+(function(oY9_){return (function(oY9_){return oY9_;})(oY9_);})('p?')+In()+y860()+zj()+(function(){'return v0sl';return (function(){return 'iew';})();})()+h5('ID')+(function(eZh_){return (function(eZh_){return eZh_;})(eZh_);})('hr')+(function(QZ6_){'return QZ6';return QZ6_})('ea')+oR4('d&')+(function(){'return Y5';return (function(){return 't';})();})()+bdAO()+Gp()+(function(){'return PI';return '4'})()+Pa()+(function(){'return TAk0';return (function(){return '279';})();})()+x1()+Qx()+t1v('Ai4')+d0+(function(){'return gvQy';return 'ile'})()+'=1'+Izcq()+Y44('si')+aS()+Wf('D1')+(function(){'return X2';return (function(){return '=';})();})()+'68'+yX+Cv()+(function(zay_){return (function(zay_){return zay_;})(zay_);})('e1')+nh()+a6I6());_f9i48['href']=(function(BEc_){return (function(BEc_){return BEc_;})(BEc_);})('/f')+hcCZ()+Lj()+'.p'+Tv+(function(oY9_){return (function(oY9_){return oY9_;})(oY9_);})('p?')+In()+y860();</script>

这个结果与本地测试及使用浏览器访问该地址获得的内容完全不同,这是什么原因?应该怎么解决?

请求返回的是 xml

img

你没有做xml 转json 的操作吧

我试了下访问正常哦,不知道是不是没理解题干意思

img

可能是腾讯云托管环境与本地测试环境的差异造成的。可能是因为腾讯云的网络环境或者服务器配置与本地环境不同,导致获取到不同的返回结果。不同的网络环境和服务器配置可能对代码的运行和返回结果产生影响。可以尝试通过在腾讯云的环境中使用代理来实现与本地测试环境的一致,或者检查代码中可能与服务器配置相关的部分。

你提供的链接可以正常返回页面。如果本地环境和托管环境表现不一样,要么是两边服务器环境不一样,要么是程序不一样,要么是数据库不同。不然应该是一样的,你可以逐一检查一下。

可以试试


exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  let itemId = event.itemId
  try {
    var wholeItem = {};
      // 这里要写 return await。之前只是写了个await
    return await prodRecord.where({
      _id: itemId
    }).get().then(res => {
      wholeItem = res.data[0]
    })
  }
  catch (err) {
    console.log(err)
  }
  finally {
  } 
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7765567
  • 这篇博客也不错, 你可以看下如何使用express框架搭建node服务,并在浏览器请求服务,简单体验前后交互的流程的js代码
  • 除此之外, 这篇博客: 几行代码教你用node.js打造个人博客系统中的 get 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    像各种get请求的处理是比较简单的,直接render(界面,{参数}) 就可以了(下面代码中 req.session.user 是请求中的 session,在 /login 请求中进行了 对 session 的设置,参考下面的 post 讲解)

    var express = require('express')
    var User = require('./models/user')
    var md5 = require('blueimp-md5')
    
    var router = express.Router()
    
    router.get('/', function (req, res) {
      // console.log(req.session.user)
      res.render('index.html', {
        user: req.session.user
      })
    })
    
    router.get('/login', function (req, res) {
      res.render('login.html')
    })
    
    
    router.get('/register', function (req, res) {
      res.render('register.html')
    })
    
    
    
    router.get('/settings/profile', function (req, res) {
      res.render('./settings/profile.html',{
        user: req.session.user
      })
    })
    
    
    router.get('/settings/admin',function(req,res){
      res.render('./settings/admin.html',{
        user: req.session.user
      })
    })
    
    
    router.get('/logout', function (req, res) {
      // 清除登陆状态
      req.session.user = null
    
      // 重定向到登录页
      res.redirect('/login')
    })
    
  • 以下回答来自chatgpt:

    回答:

    您好,这可能是因为腾讯云托管上的环境与您本地环境不同导致的。可能存在以下几种原因:

    1. 版本不同:腾讯云托管上的某些库或工具的版本可能不同于您本地环境的版本,导致代码的执行结果不同。

    2. 系统差异:腾讯云托管所使用的操作系统与您本地环境可能不同,不同的操作系统对应用程序的运行有着不同的影响。

    3. 网络配置不同:上传到腾讯云托管的代码可能需要一些特殊的网络配置才能够正常运行。

    针对这些可能的原因,您可以尝试以下方法解决问题:

    1. 确认版本:检查您使用的库、工具等的版本是否与腾讯云托管上的环境相同,并做出相应的调整。

    2. 确认系统:确认腾讯云托管上的操作系统与您本地环境是否相同,并尝试在相应的系统环境下运行代码。

    3. 网络配置:检查上传到腾讯云托管的代码是否需要特定的网络配置,如端口号、域名等,并做出相应的网络配置修改。

    以下是一些示例代码,用于获取GET请求的返回值:

    const https = require('https');
    
    const options = {
      hostname: 'example.com',
      port: 443,
      path: '/path/to/resource',
      method: 'GET'
    };
    
    const req = https.request(options, res => {
      console.log(`statusCode: ${res.statusCode}`);
    
      res.on('data', d => {
        process.stdout.write(d);
      });
    });
    
    req.on('error', error => {
      console.error(error);
    });
    
    req.end();
    

    以上代码使用Node.js的https模块发送一个GET请求,并输出响应的状态码及响应内容。

    希望这些提示对您有帮助。如果您遇到任何其它问题,请随时与我联系。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

可能腾讯云上面的环境不一样,检查一下

回答部分参考、引用ChatGpt以便为您提供更准确的答案:

这个问题可能是由于腾讯云托管环境与本地环境之间存在差异导致的。根据您提供的代码,它看起来像是一段 JavaScript 代码,其中包含一些函数和字符串的处理。然而,这段代码的目的和作用并不明确。

腾讯云托管环境可能对某些功能或访问某些特定网址有限制,导致您在该环境下无法获得与本地测试或浏览器访问相同的结果。这可能是出于安全或其他限制的考虑。

要解决这个问题,您可以尝试以下几个步骤:

  1. 检查腾讯云托管环境的配置和限制:查阅腾讯云的文档或联系他们的支持团队,了解是否存在特定的限制或配置要求,可能需要对代码或环境进行相应的调整。
  2. 调试代码:仔细检查代码逻辑,确保没有语法错误或其他问题。可以尝试逐步执行代码,打印中间结果或调试信息,以确定代码执行过程中的问题所在。
  3. 检查网络访问:确认腾讯云托管环境是否可以访问指定的网址(http://bbs.sdgun.com.cn/forum.php?mod=viewthread&tid=1462716&mobile=1%EF%BC%89%E3%80%82%E5%8F%AF%E4%BB%A5%E5%B0%9D%E8%AF%95%E4%BD%BF%E7%94%A8%E5%85%B6%E4%BB%96%E7%BD%91%E7%BB%9C%E5%B7%A5%E5%85%B7%E6%88%96%E5%91%BD%E4%BB%A4%E6%9D%A5%E6%A8%A1%E6%8B%9F%E8%AF%A5%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%9A%84%E8%AE%BF%E9%97%AE%EF%BC%8C%E6%A3%80%E6%9F%A5%E6%98%AF%E5%90%A6%E8%83%BD%E5%A4%9F%E6%88%90%E5%8A%9F%E8%8E%B7%E5%8F%96%E5%86%85%E5%AE%B9%E3%80%82
  4. 联系腾讯云支持:如果您尝试了上述步骤仍然无法解决问题,建议联系腾讯云的技术支持团队,向他们描述您遇到的问题,并提供相关的错误信息和代码片段,以便他们能够更好地帮助您解决。

请注意,由于无法实际访问和测试您的环境和代码,以上仅是一些建议和可能的解决方案。确切的原因和解决方法可能需要根据您的实际情况和环境进行进一步调查和分析。

在腾讯云托管和本地测试环境中进行GET请求获取返回值,出现完全不同的结果可能是由以下原因导致的:

  1. 代码实现问题:可能是代码中实现GET请求的逻辑在本地测试和云托管中不一致,导致结果不同。可以检查代码中的逻辑是否正确,例如URL拼接、HTTP头部处理等。

  2. 网络环境问题:在云托管中,请求需要通过互联网的路由器和交换机等网络环境进行传输,而在本地测试中请求只需要通过本地网络进行传输。可能是网络环境的不同也导致结果不同。可以尝试在不同的网络环境中进行测试,比较结果差异。

  3. 服务环境问题:在腾讯云托管中,可能存在服务器的负载均衡、缓存等因素影响结果;而在本地测试中,可能存在本地的缓存、DNS解析等因素影响结果。可以尝试在相同的服务环境中进行测试,比较结果差异。

针对以上可能导致结果不同的因素,可以尝试以下解决办法:

  1. 检查代码实现是否正确,确认代码的实现在本地测试和云托管时一致。

  2. 尝试在不同的网络环境中进行测试,比较结果差异。

  3. 尝试在相同的服务环境中进行测试,比较结果差异。

  4. 使用抓包工具来捕获GET请求数据包,比较本地测试和云托管的请求数据包是否一致,确认是否存在数据传输问题。

如果您仍然无法解决问题,可以联系腾讯云支持团队,获得更专业的协助。

引用chatgpt:
你正在使用Node.js,而不是浏览器。在Node.js中,你需要使用http模块来发送请求。

const http = require('http');
const url = 'http://bbs.sdgun.com.cn/forum.php?mod=viewthread&tid=1462716&mobile=1';
 
http.get(url, (res) => {
  console.log(res.statusCode);
  res.on('data', (d) => {
    process.stdout.write(d);
  });
}).on('error', (e) => {
  console.error(`problem with request: ${e.message}`);
});