V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
SharkIng
V2EX  ›  问与答

如何去虚拟一个 HTTP Header 数据?

  •  
  •   SharkIng · 2015-01-13 07:38:21 +08:00 · 2673 次点击
    这是一个创建于 3603 天前的主题,其中的信息可能已经有所发展或是发生改变。
    PHP中用到了一个服务器提供商所给的一个数据 $_SERVER['HTTP_ID'] 等等,这个是服务器内部设置的一个SSO登录的返回值,在不修改现有PHP代码的时候,有什么浏览器插件或者是什么特别办法能够虚拟一个这个值得么??
    11 条回复    2015-01-13 12:16:28 +08:00
    c742435
        1
    c742435  
       2015-01-13 07:48:42 +08:00
    Fiddler?
    我猜的……
    SharkIng
        2
    SharkIng  
    OP
       2015-01-13 07:54:04 +08:00
    补充说一下,因为是一个内部程序,服务器是内部提供的,所以这个SSO的登录方式和我以前接触到的各种社交网络的那种SSO登录方式不一样,他是将服务器上一个文件夹设为保护,所有访问文件夹的文件的时候都会被需要登录,登录是另外一个网站上实现的,也就是说我们的PHP代码中没有任何请求登录的东西,只是将一个(比如Login)按钮跳转到一个(比如Admin)的文件夹中的一个PHP文件上

    服务器会通过登录返回一组以 $_SERVER[''] 为头的数据,'' 引号中是数据的名称,所调用的是以登录用户的信息,例如ID,邮箱,姓名等

    那么问题是,因为不可能每次修改PHP都上传到服务器上做一个测试,那么我们如何可以在本地本机上虚拟出这么一个数据组来完成虚拟登录呢?需要在不修改任何已有PHP文件代码的基础上(可以新加文件但是比较麻烦,或者最好能有软件或者浏览器插件支持)

    Google了一下,好像有一些Chrome/Firefox的插件可以,但是不知道所虚拟出来的数据是不是能够做到一模一样的?而且有没有使用过的童鞋能够推荐一下哪个比较好用呢??
    endoffight
        3
    endoffight  
       2015-01-13 08:01:00 +08:00 via iPhone
    php的curl,file_get_content
    python的urllib2和request都可以
    endoffight
        4
    endoffight  
       2015-01-13 08:03:37 +08:00 via iPhone   ❤️ 1
    chrome还有个叫postman的插件,可以添加标准的http协议头信息,还会自动添加已存在的cookie
    SharkIng
        5
    SharkIng  
    OP
       2015-01-13 08:22:34 +08:00
    @endoffight 好的,谢谢,先试试Postman吧
    SharkIng
        6
    SharkIng  
    OP
       2015-01-13 08:35:18 +08:00
    @endoffight 看了下postman功能挺强大的但是好像没办法虚拟 $_SERVER['']这样的头部信息
    feiyuanqiu
        7
    feiyuanqiu  
       2015-01-13 09:44:35 +08:00
    $_SERVER 是个全局变量,你想改的话,直接在你本地改了就行,用不着去浏览器里面修改

    还是没看懂问题,这个 $_SERVER['HTTP_ID'] 就是你们服务器生成的 session_id 吗?如果是的话,还真不能在本地随便生成一个值,session_id 对应的是服务器上的 session 文件的 id,如果你自己弄个值,服务器找不到这个 session 文件,还是会让你重新登录的

    如果你在本地测试,不需要调用服务器上的资源,你就直接在你本地登录那个地方,把 $_SESSION 或者其他需要用到的登录信息写死就行了
    fising
        8
    fising  
       2015-01-13 10:18:09 +08:00
    SharkIng
        9
    SharkIng  
    OP
       2015-01-13 11:34:42 +08:00   ❤️ 1
    @fising 感觉是不一样的东西


    @feiyuanqiu 这个$_SERVER['HTTP_ID_NUMBER'] 只是一个SSO的返回值,服务器上设置好的,只要进入保护文件夹就会跳转SSO登录页面,登录成功直接进入保护文件夹中某个PHP文件/页面,然后会通过Header传输一个$_SERVER['HTTP_ID_NUMBER'] 的数据,这个数据就是一个用户的ID号而已,在主服务器用户数据库里面的信息

    我们现在只是需要虚拟一个这个信息,以方便在本地测试,如果您说在本地修改这个全局变量是怎么做呢?

    PS:$_SERVER['HTTP_ID_NUMBER'] 中的Key不是正常PHP所用过的 $_SERVER[''] 里面的KEY
    fising
        10
    fising  
       2015-01-13 11:55:37 +08:00
    那直接在代码里面初始化的时候,

    $_SERVER['HTTP_ID_NUMBER'] = 'xxxx'

    赋值不就行了
    feiyuanqiu
        11
    feiyuanqiu  
       2015-01-13 12:16:28 +08:00
    @SharkIng 你现在的问题是不想每次都登录呢?还是不想每次都去服务器获取用户数据呢?

    不想每次登录的话,就去找跳转到登录页面 之前的代码,那里肯定有是否已登录的判断的,自己琢磨着改一下就行
    不想从服务器获取用户数据的话,应该是你本地没有权限连接服务器数据库吧?找领导开一下呗
    或者看下你本地有没有db 的 config 文件,把 host 改成服务器 ip

    实在不行,在获取用户信息那里,把用户信息 var_export 出来,写死到代码里。比如:

    // 假设这是你们获取用户信息的代码
    $user = getUserInfo($_SERVER['HTTP_ID_NUMBER']);
    var_export($user);exit;
    // 传到测试服务器,运行一下,把得到的数据复制下来,写死在你本地代码里:
    $user = array('user_name' => 'test', 'real_name' => 'ergou',);
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2684 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:46 · PVG 11:46 · LAX 19:46 · JFK 22:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.