请教 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 条回复
shiny
2017-01-07 19:34:52 +08:00
js 还能改 User Agent ?
jimwoo
2017-01-07 19:35:06 +08:00
呃…你 js 修改只是改了当前页面下的环境。然而你执行完 js 后,浏览器发起请求你的图片浏览器还是会保持他本身的 ua …简单来说… js 改的只会在 js 获取的时候被改,其他地方然并卵
zmj1316
2017-01-07 19:41:21 +08:00
自己实现一下 http request 就可以构造自定义头了吧?
xfspace
2017-01-07 19:41:49 +08:00
我听过用 Browser 改 UA...
JavaScript 还能控制 UA...
jessynt
2017-01-07 19:42:53 +08:00
NO WAY!
smallpath
2017-01-07 20:57:25 +08:00
浏览器发的没办法, fetch 或者 XHR 可以拦截
zbinlin
2017-01-07 21:18:04 +08:00
> 浏览器发送给服务器请求中的 UA 和通过 JS 取到的 UA 是两个不同的实例

http 的 User-Agent 头确实可以与 JS 的 `navigator.userAgent` 不同,比如 Firefox 就可以修改成这样,但一般是一样的。
而你现在修改的 JS 环境里的 navigator.userAgent ,这是 JS 环境里的一个值,与 http 请求头 User-Agent 不是一个东西来的。要修改 http 请求头,如果是通过浏览器的请求,一般需要使用浏览器的扩展来实现;如果是通过 JS 请求的, xhr 和 fetch 都可以直接修改(但也不是通过 navigator.userAgent 来修改的, navigator.userAgent 是给 js 来用的)

最后提供一个比较 hack 的做法:可以通过 xhr 或 fetch 来请求图片数据,然后转成 base64 显示出来(不过这可能会涉及到跨域问题)。

PS :你的图片服务器不是公开的吗?为什么会屏蔽浏览器的 UA ?
qiqiboy
2017-01-07 21:25:21 +08:00
无法,搞代理吧
Kokororin
2017-01-07 21:47:40 +08:00
ajax 请求即可
SoyaDokio
2017-01-07 23:47:30 +08:00
@jimwoo 果然是这样,那请问有无思路提供?
SoyaDokio
2017-01-07 23:48:46 +08:00
@zmj1316 HTML 静态无法实现, JS 如何实现 HTTP Request 的构造? JS 新人~~
orvice
2017-01-07 23:54:27 +08:00
ua 是浏览器加的吧
binux
2017-01-08 00:06:05 +08:00
除非你找到了浏览器的漏洞, user-context 的 JS 不可能修改 user-agent
@Kokororin ajax 也不可以修改 user-agent
fzhw88
2017-01-08 00:13:47 +08:00
js 的执行环境仅仅是当前页面, so …
fzhw88
2017-01-08 00:18:44 +08:00
@SoyaDokio 查用 Ajax 能不能构造请求头, xmlhttprequest 的实例,我忘了具体怎么搞……应该是可以的
lslqtz
2017-01-08 01:00:46 +08:00
你可以通过扩展方式对相应的请求截获并修改 UA 。
wohenyingyu02
2017-01-08 01:40:40 +08:00
UA 的意义不就是获取客户端类型么,如果网页能随便改似乎没意义了?
ihciah
2017-01-08 03:11:49 +08:00
或者你可以试试 flash ……
RqPS6rhmP3Nyn3Tm
2017-01-08 03:15:06 +08:00
用 requests 模块多好,不折腾
skydiver
2017-01-08 03:25:23 +08:00
明显是 XY 问题…你应该从根本上解决这个问题,而不是非要用这种投机取巧的办法

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

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

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

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

© 2021 V2EX