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

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

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

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

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

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

如果你在本地测试,不需要调用服务器上的资源,你就直接在你本地登录那个地方,把 $_SESSION 或者其他需要用到的登录信息写死就行了
fising
2015-01-13 10:18:09 +08:00
SharkIng
2015-01-13 11:34:42 +08:00
@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
2015-01-13 11:55:37 +08:00
那直接在代码里面初始化的时候,

$_SERVER['HTTP_ID_NUMBER'] = 'xxxx'

赋值不就行了
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',);

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/161610

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX