请教 JS 如何修改 UserAgent?

2017-01-07 19:31:59 +08:00
 SoyaDokio

起因:因为图片服务器为了统计信息,所以做了 UA 验证,而 WebAdmin 的一些图片是存储在该图片服务器上的,于是 403 了。

思路:现在我想到的最直观的思路就是使用 JS 更改登陆 WebAdmin 的浏览器的 UA 以完成验证并顺利取到图片资源。

尝试:今天搜索了一整天,把 google 上能搜到的都看了,其中一半都在 StackOverflow 上,但是得出的解决方案就一种,且无效果,下面是“解决方案”:

Object.navigator.\_\_defineGetter\_\_('userAgent', '自定义 UA 字串');//旧写法
Object.prototype.setProperty(navigator, 'userAgent': function() {return '自定义 UA 字串';});//新写法

写法大概是这样,我不太记得了,还有个写法差不多的方式就不列出来了。

这些方案无一例外,在 JS 中修改成功,然后执行

console.log(window.navigator.userAgent);

也是正常的,但是发送到服务器的 UA 却还是未修改过的原 UA ,但是使用 Chrome 、 Firefox 自带的改 UA 的方法,均有效。所以我最后猜测: 浏览器发送给服务器请求中的 UA 和通过 JS 取到的 UA 是两个不同的实例

那么问题来了:如何通过 JS 修改 UA 呢?望大神们不吝赐教~~

30317 次点击
所在节点    JavaScript
48 条回复
ine181x
2017-01-08 08:23:26 +08:00
楼上说的是对的。
zmj1316
2017-01-08 09:18:56 +08:00
@SoyaDokio 我没有什么前段经验,但是如果能够用 socket 的话怎么样都行啊
zhidian
2017-01-08 11:03:58 +08:00
这样的浏览器插件应该随手可以搜到吧(如果你是在浏览器里运行 js ),比如: https://addons.mozilla.org/en-US/firefox/addon/custom-user-agent-string/ (火狐), Chrome 我猜也有。亲测有效。
xjp
2017-01-08 11:04:43 +08:00
不能改 head 里有几个关键字段 js 无权限修改的 比如 date 浏览器会报错 如果你是 nodejs 的话另当别论
zhidian
2017-01-08 11:05:42 +08:00
额……又看了一遍,你已经试过了插件……
realpg
2017-01-08 11:12:06 +08:00
形象点说,又是一个持有工商储蓄卡就想修改工行卡余额的……
SoyaDokio
2017-01-08 12:32:12 +08:00
@smallpath 多谢告知。
SoyaDokio
2017-01-08 12:39:29 +08:00
@zbinlin 图片服务器好像是为了统计自家 APP 的相关信息,所以对 UA 做了特殊判断(是否包含特定字串),而现在就是想要对(需要用到该图片服务器的资源的) WebAdmin 后台管理页面在请求该图片服务器的资源时的请求头中的 UA 做特殊修改(追加上图片服务器需要的特定字串)。
另,请教“如果是通过浏览器的请求,一般需要使用浏览器的扩展来实现”,和“如果是通过 JS 请求的, xhr 和 fetch 都可以直接修改”分别是什么意思,难道是指前者是由浏览器发出 GET 请求的,后者是由 JS 发出请求的?还不是一回事儿?
SoyaDokio
2017-01-08 12:42:00 +08:00
@Kokororin 愿闻其详。
另,「こころ」は何ですか?
SoyaDokio
2017-01-08 12:43:06 +08:00
@fzhw88 多谢,我搜索一下
SoyaDokio
2017-01-08 12:43:32 +08:00
@lslqtz browser extension ?
SoyaDokio
2017-01-08 12:44:03 +08:00
@ihciah Flash 一窍不通。愿闻其详。
SoyaDokio
2017-01-08 12:44:48 +08:00
@skydiver XY 问题?
SoyaDokio
2017-01-08 12:45:53 +08:00
@realpg 茅塞顿开 QAQ
SoyaDokio
2017-01-08 12:47:40 +08:00
@zhidian 其实主要是因为后台管理页面是可以随处登陆的,用户也不会是同一个人,如果每次登陆都修改一次登录时用的浏览器的 UA ,那就有点儿...
myleon
2017-01-08 13:25:14 +08:00
js 运行是浏览器解析吧,这时候浏览器已经获取请求头了呀还咋改
BOYPT
2017-01-08 13:27:22 +08:00
让你的 js 在浏览器插件方式运行就可以改了, 具体参考浏览器插件的 api
Kokororin
2017-01-08 13:35:51 +08:00
@SoyaDokio 测试了一下,确实改不了,会报错: Refused to set unsafe header "User-Agent"
PS ココロ 源自一首歌
SoyaDokio
2017-01-08 14:04:00 +08:00
@Kokororin 多谢。
SoyaDokio
2017-01-08 14:04:59 +08:00
@BOYPT 好 我搜一下。

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

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

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

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

© 2021 V2EX