論您是SEO,營(yíng)銷人員還是Web開發(fā)人員,通常都可能需要更改瀏覽器的用戶代理以測(cè)試其他內(nèi)容。
例如,您正在運(yùn)行特定于MAC-OS的活動(dòng)。要確定您的廣告系列是否正常運(yùn)行并且未針對(duì)Linux用戶,更改瀏覽器的用戶代理可以幫助您進(jìn)行測(cè)試。
對(duì)于Web開發(fā)人員來說,更改用戶代理幾乎是日常工作,以測(cè)試網(wǎng)站在不同瀏覽器和設(shè)備上的行為。
用戶代理是HTTP請(qǐng)求標(biāo)頭字符串,用于標(biāo)識(shí)連接到服務(wù)器的瀏覽器,應(yīng)用程序或操作系統(tǒng)。
瀏覽器不僅具有用戶代理,還具有機(jī)器人,搜尋器(例如搜索引擎Googlebot,Google AdSense等)。
在這里,我們將學(xué)習(xí)如何更改瀏覽器的用戶代理。
該過程稱為用戶代理欺騙。
是的,當(dāng)瀏覽器或任何客戶端發(fā)送與他們不同的用戶代理HTTP標(biāo)頭并對(duì)其進(jìn)行偽造(稱為欺騙)時(shí)。
雖然該術(shù)語(yǔ)可能令人震驚,但這不是危險(xiǎn)的活動(dòng),不會(huì)給您造成任何問題。(因此,您可以隨意欺騙用戶代理。)
由于Microsoft Edge 現(xiàn)在使用Chromium,因此Chrome和Edge的設(shè)置相同。
另外,您可以在Windows上使用CTR + Shift + I,在Mac 上使用Cmd + Opt + J。
單擊右上角的三個(gè)垂直點(diǎn)。
如果所需的用戶代理不存在,則可以在列表下方的字段中輸入所需的任何字符串。
例如,您可以在自定義字段中輸入以下內(nèi)容(Googlebot的用戶代理)。
Mozilla / 5.0(兼容; Googlebot / 2.1; + http://www.google.com/bot.html)
當(dāng)網(wǎng)頁(yè)顯示的內(nèi)容與Googlebot和網(wǎng)站訪問者的內(nèi)容不同時(shí),這對(duì)于SEO專業(yè)人員識(shí)別網(wǎng)站上是否存在偽裝很有用。
另外,您也可以使用Chrome擴(kuò)展程序User-Agent Switcher and Manager。
就是說,當(dāng)瀏覽器實(shí)際上可以執(zhí)行我想要的操作時(shí),我盡量不要使用瀏覽器擴(kuò)展。這是為了避免大量的加載項(xiàng)使瀏覽器過載。
此外,擴(kuò)展程序有時(shí)會(huì)意外破壞網(wǎng)站。
盡管您可能認(rèn)為所訪問的網(wǎng)站存在問題,但根本原因可能是您使用的附加組件之一。
轉(zhuǎn)到“ 高級(jí)”, 然后選中菜單欄中的“顯示開發(fā)”菜單。
您可以再次從預(yù)定義列表中選擇,也可以通過選擇“其他…”輸入自定義用戶代理字符串。
在Firefox中,可以通過瀏覽器的內(nèi)置設(shè)置來更改用戶代理。
但是,它不像在Chrome或Safari上那樣易于使用。
使用瀏覽器的內(nèi)置功能確實(shí)很痛苦。
相反,我們將使用名為User-Agent Switcher的Firefox附加組件。
安裝插件后,您將在右上角看到一個(gè)圖標(biāo)。
您可以選擇預(yù)定義的用戶代理之一,也可以通過單擊下面的筆圖標(biāo)輸入自定義用戶代理。
您可以使用的另一個(gè)擴(kuò)展是User-Agent Switcher and Manager。
用戶代理很容易被欺騙,任何人都可以使用這些簡(jiǎn)單的技巧對(duì)其進(jìn)行更改。
此功能對(duì)于在各種設(shè)備上測(cè)試Web應(yīng)用程序非常有用,尤其是當(dāng)針對(duì)移動(dòng)設(shè)備或平板電腦設(shè)備使用不同的HTML時(shí)。
一個(gè)人不需要擁有許多物理設(shè)備就可以進(jìn)行測(cè)試。
此功能對(duì)SEO專業(yè)人員很有用,例如,識(shí)別與Google網(wǎng)站站長(zhǎng)指南相抵觸的偽裝問題或?qū)ν庥^有所不同(取決于設(shè)備)的網(wǎng)站進(jìn)行審核。
最近,在進(jìn)行開發(fā)的過程中,發(fā)現(xiàn)之前的一個(gè)寫法,類似如下
以我的理解,@Configuration 加 @Bean 會(huì)創(chuàng)建一個(gè) userName 不為 null 的 UserManager 對(duì)象,而 @Component 也會(huì)創(chuàng)建一個(gè) userName 為 null 的 UserManager 對(duì)象
那么我們?cè)谄渌麑?duì)象中注入 UserManager 對(duì)象時(shí),到底注入的是哪個(gè)對(duì)象?
因?yàn)轫?xiàng)目已經(jīng)上線了很長(zhǎng)一段時(shí)間了,所以這種寫法沒有編譯報(bào)錯(cuò),運(yùn)行也沒有出問題
后面去找同事了解下,實(shí)際是想讓
生效,而實(shí)際也確實(shí)是它生效了
那么問題來了: Spring 容器中到底有幾個(gè) UserManager 類型的對(duì)象?
項(xiàng)目中用的 Spring Boot 版本是: 2.0.3.RELEASE
對(duì)象的 scope 是默認(rèn)值,也就是 singleton
驗(yàn)證方式有很多,可以 debug 跟源碼,看看 Spring 容器中到底有幾個(gè) UserManager 對(duì)象,也可以直接從 UserManager 構(gòu)造方法下手,看看哪幾個(gè)構(gòu)造方法被調(diào)用,等等
我們從構(gòu)造方法下手,看看 UserManager 到底實(shí)例化了幾次
只有有參構(gòu)造方法被調(diào)用了,無參構(gòu)造方法巋然不動(dòng)(根本沒被調(diào)用)
如果想了解的更深一點(diǎn),可以讀讀鄙人的:Spring 的循環(huán)依賴,源碼詳細(xì)分析 → 真的非要三級(jí)緩存嗎
既然 UserManager 構(gòu)造方法只被調(diào)用了一次,那么前面的問題: 到底注入的是哪個(gè)對(duì)象
答案也就清晰了,沒得選了呀,只能是 @Configuration 加 @Bean 創(chuàng)建的 userName 不為 null 的 UserManager 對(duì)象
問題又來了:為什么不是 @Component 創(chuàng)建的 userName 為 null 的 UserManager 對(duì)象?
@Configuration 與 @Component 關(guān)系很緊密
所以 @Configuration 能夠被 component scan
在spring-boot-2.0.3源碼篇 - @Configuration、Condition與@Conditional中講到了 @Configuration 的實(shí)現(xiàn)原理
其中 ConfigurationClassPostProcessor 與 @Configuration 息息相關(guān),其類繼承結(jié)構(gòu)圖如下:
它實(shí)現(xiàn)了 BeanFactoryPostProcessor 接口和 PriorityOrdered 接口,關(guān)于 BeanFactoryPostProcessor ,可以看看鄙人的Spring拓展接口之BeanFactoryPostProcessor,占位符與敏感信息解密原理
那么我們從 AbstractApplicationContext 的 refresh 方法調(diào)用的 invokeBeanFactoryPostProcessors(beanFactory) 開始,來跟下源碼
此時(shí)完成了 com.lee.qsl 包下的 component scan , com.lee.qsl 包及子包下的 UserConfig 、 UserController 和 UserManager 都被掃描出來
注意,此刻 @Bean 的處理還未開始, UserManager 是通過 @Component 而被掃描出來的;此時(shí) Spring 容器中 beanDefinitionMap 中的 UserManager 是這樣的
接下來一步很重要,與我們想要的答案息息相關(guān)
循環(huán)遞歸處理 UserConfig 、 UserController 和 UserManager ,把它們都封裝成 ConfigurationClass ,遞歸掃描 BeanDefinition
循環(huán)完之后,我們來看看 configClasses
UserConfig bean 定義信息中 beanMethods 中有一個(gè)元素 [BeanMethod:name=userManager,declaringClass=com.lee.qsl.config.UserConfig]
然后我們接著往下走,來仔細(xì)看看答案出現(xiàn)的環(huán)節(jié)
是不是有什么發(fā)現(xiàn)? @Component 修飾的 UserManager 定義直接被覆蓋成了 @Configuration + @Bean 修飾的 UserManager 定義
Bean 定義類型也由 ScannedGenericBeanDefinition 替換成了 ConfigurationClassBeanDefinition
后續(xù)通過 BeanDefinition 創(chuàng)建實(shí)例的時(shí)候,創(chuàng)建的自然就是 @Configuration + @Bean 修飾的 UserManager ,也就是會(huì)反射調(diào)用 UserManager 的有參構(gòu)造方法
自此,答案也就清楚了
Spring 其實(shí)給出了提示
View Code
只是日志級(jí)別是 info ,太不顯眼了
可能 Spring 團(tuán)隊(duì)意識(shí)到了 info 級(jí)別太不顯眼的問題,或者說意識(shí)到了直接覆蓋的處理方式不太合理
所以在 Spring 5.1.2.RELEASE (Spring Boot 則是 2.1.0.RELEASE )做出了優(yōu)化處理
我們來具體看看
啟動(dòng)直接報(bào)錯(cuò),Spring 也給出了提示
View Code
我們來跟下源碼,主要看看與 Spring 5.0.7.RELEASE 的區(qū)別
新增了配置項(xiàng) allowBeanDefinitionOverriding 來控制是否允許 BeanDefinition 覆蓋,默認(rèn)情況下是不允許的
我們可以在配置文件中配置: spring.main.allow-bean-definition-overriding=true ,允許 BeanDefinition 覆蓋
這種處理方式是更優(yōu)的,將選擇權(quán)交給開發(fā)人員,而不是自己偷偷的處理,已達(dá)到開發(fā)者想要的效果
Spring 5.0.7.RELEASE ( Spring Boot 2.0.3.RELEASE ) 支持 @Configuration + @Bean 與 @Component 同時(shí)作用于同一個(gè)類
啟動(dòng)時(shí)會(huì)給 info 級(jí)別的日志提示,同時(shí)會(huì)將 @Configuration + @Bean 修飾的 BeanDefinition 覆蓋掉 @Component 修飾的 BeanDefinition
也許 Spring 團(tuán)隊(duì)意識(shí)到了上述處理不太合適,于是在 Spring 5.1.2.RELEASE 做出了優(yōu)化處理
增加了配置項(xiàng): allowBeanDefinitionOverriding ,將主動(dòng)權(quán)交給了開發(fā)者,由開發(fā)者自己決定是否允許覆蓋
原文鏈接:https://www.cnblogs.com/youzhibing/p/15354706.html
擊“PLC發(fā)燒友”,一起漲知識(shí)!
EasyBuilder Pro 主要是組態(tài)編寫威綸通觸摸屏畫面設(shè)計(jì)并和實(shí)際威綸通觸摸屏通訊連接軟件,可使用以太網(wǎng)或 USB 線來下載于 EasyBuilder Pro 組態(tài)畫面。
1 下載步驟
第一步:(打開瀏覽器,在網(wǎng)址地址欄寫入http://www.jcpeixun.com/進(jìn)入技成官網(wǎng)—點(diǎn)擊下載中心)
第二步:(進(jìn)入https://bbs.jcpeixun.com/thread-11948-1-1.html找到威綸通觸摸屏軟件點(diǎn)擊第六個(gè)即可下載)
友情溫馨提醒:下載要注意的是必須要登錄技成會(huì)員賬號(hào)才能獲取下載地址進(jìn)行下載哦!
2安裝步驟
第一步:(在桌面找到下載好的安裝包,當(dāng)然可能你們下載到其它存儲(chǔ)地方,我這里以桌面來講解,方法都一樣的。)
第二步:(解壓下載好的安裝包文件)
第三步:(解壓好后,打開文件夾鼠標(biāo)選中setup安裝執(zhí)行文件并鼠標(biāo)右擊以管理員身份運(yùn)行)
第四步:(安裝語(yǔ)言選擇中文(簡(jiǎn)體)后點(diǎn)擊確定)
第五步:(直接點(diǎn)擊下一步)
第六步:(選擇我接受協(xié)議,點(diǎn)擊下一步)
第七步:(默認(rèn)安裝路徑C盤(系統(tǒng)盤),至少需要1.5G的安裝硬盤空間)
第八步:(直接點(diǎn)擊下一步)
第九步:(這里要注意了,一定要勾選(創(chuàng)建桌面圖標(biāo))換句說就是桌面快捷方式,不勾選到時(shí)候安裝好桌面會(huì)找不到快捷方式哦!然后點(diǎn)擊下一步)
第十步:(這里可以看到前幾步設(shè)置的一些參數(shù)信息,點(diǎn)擊安裝)
第十一步:(進(jìn)入安裝過程,耐心等待即可)
第十二步:(安裝到這一步的時(shí)候提示是否要安裝驅(qū)動(dòng),點(diǎn)擊始終安裝此驅(qū)動(dòng)程序軟件)
第十三步:(安裝完成,點(diǎn)擊完成即可)。
第十四步:(安裝完成后,在桌面會(huì)出現(xiàn)Utility Manager快捷方式)
第十五步:(鼠標(biāo)雙擊打開Utility Manager快捷方式,進(jìn)入軟件啟動(dòng)對(duì)話框,鼠標(biāo)點(diǎn)擊EasyBuilder Pro進(jìn)入軟件界面)
來源:PLC發(fā)燒友,作者:技成培訓(xùn)網(wǎng)-徐陳爽。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。