Skip to content

Commit

Permalink
添加uos请求头支持 (#129)
Browse files Browse the repository at this point in the history
* 添加uos请求头支持

* Update bridge.ts

* fix lint

* fix lint

* fix lint

* fix lint

* fix lint

* move uos to patch method

* 0.27.1

Co-authored-by: Huan LI (李卓桓) <zixia@zixia.net>
  • Loading branch information
leochen-g and huan authored Apr 13, 2021
1 parent f929c2b commit 4a66a06
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 34 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "wechaty-puppet-wechat",
"version": "0.27.0",
"version": "0.27.1",
"description": "Puppet WeChat for Wechaty",
"main": "dist/src/mod.js",
"typings": "dist/src/mod.d.ts",
Expand Down
60 changes: 27 additions & 33 deletions src/bridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,10 +132,6 @@ export class Bridge extends EventEmitter {
launchOptions.executablePath = this.options.endpoint
}

const extensionOptionsArgs = [
...this.getWeChromeExtensionOptionsArgs(),
]

const options = {
...launchOptions,
args: [
Expand All @@ -149,7 +145,6 @@ export class Bridge extends EventEmitter {
'--mute-audio',
'--no-sandbox',
...launchOptionsArgs,
...extensionOptionsArgs,
],
headless,
}
Expand Down Expand Up @@ -230,6 +225,12 @@ export class Bridge extends EventEmitter {
// might be called before initPage() return.
const page = this.page = await browser.newPage()

/**
* Can we support UOS with puppeteer? #127
* https://github.com/wechaty/wechaty-puppet-wechat/issues/127
*/
await this.uosPatch(page)

page.on('error', e => this.emit('error', e))
page.on('dialog', this.onDialog.bind(this))

Expand Down Expand Up @@ -268,36 +269,26 @@ export class Bridge extends EventEmitter {
const UOS_PATCH_CLIENT_VERSION = '2.0.0'
const UOS_PATCH_EXTSPAM = 'Gp8ICJkIEpkICggwMDAwMDAwMRAGGoAI1GiJSIpeO1RZTq9QBKsRbPJdi84ropi16EYI10WB6g74sGmRwSNXjPQnYUKYotKkvLGpshucCaeWZMOylnc6o2AgDX9grhQQx7fm2DJRTyuNhUlwmEoWhjoG3F0ySAWUsEbH3bJMsEBwoB//0qmFJob74ffdaslqL+IrSy7LJ76/G5TkvNC+J0VQkpH1u3iJJs0uUYyLDzdBIQ6Ogd8LDQ3VKnJLm4g/uDLe+G7zzzkOPzCjXL+70naaQ9medzqmh+/SmaQ6uFWLDQLcRln++wBwoEibNpG4uOJvqXy+ql50DjlNchSuqLmeadFoo9/mDT0q3G7o/80P15ostktjb7h9bfNc+nZVSnUEJXbCjTeqS5UYuxn+HTS5nZsPVxJA2O5GdKCYK4x8lTTKShRstqPfbQpplfllx2fwXcSljuYi3YipPyS3GCAqf5A7aYYwJ7AvGqUiR2SsVQ9Nbp8MGHET1GxhifC692APj6SJxZD3i1drSYZPMMsS9rKAJTGz2FEupohtpf2tgXm6c16nDk/cw+C7K7me5j5PLHv55DFCS84b06AytZPdkFZLj7FHOkcFGJXitHkX5cgww7vuf6F3p0yM/W73SoXTx6GX4G6Hg2rYx3O/9VU2Uq8lvURB4qIbD9XQpzmyiFMaytMnqxcZJcoXCtfkTJ6pI7a92JpRUvdSitg967VUDUAQnCXCM/m0snRkR9LtoXAO1FUGpwlp1EfIdCZFPKNnXMeqev0j9W9ZrkEs9ZWcUEexSj5z+dKYQBhIICviYUQHVqBTZSNy22PlUIeDeIs11j7q4t8rD8LPvzAKWVqXE+5lS1JPZkjg4y5hfX1Dod3t96clFfwsvDP6xBSe1NBcoKbkyGxYK0UvPGtKQEE0Se2zAymYDv41klYE9s+rxp8e94/H8XhrL9oGm8KWb2RmYnAE7ry9gd6e8ZuBRIsISlJAE/e8y8xFmP031S6Lnaet6YXPsFpuFsdQs535IjcFd75hh6DNMBYhSfjv456cvhsb99+fRw/KVZLC3yzNSCbLSyo9d9BI45Plma6V8akURQA/qsaAzU0VyTIqZJkPDTzhuCl92vD2AD/QOhx6iwRSVPAxcRFZcWjgc2wCKh+uCYkTVbNQpB9B90YlNmI3fWTuUOUjwOzQRxJZj11NsimjOJ50qQwTTFj6qQvQ1a/I+MkTx5UO+yNHl718JWcR3AXGmv/aa9rD1eNP8ioTGlOZwPgmr2sor2iBpKTOrB83QgZXP+xRYkb4zVC+LoAXEoIa1+zArywlgREer7DLePukkU6wHTkuSaF+ge5Of1bXuU4i938WJHj0t3D8uQxkJvoFi/EYN/7u2P1zGRLV4dHVUsZMGCCtnO6BBigFMAA='

const extraHeaders = {
const uosHeaders = {
'client-version' : UOS_PATCH_CLIENT_VERSION,
extspam : UOS_PATCH_EXTSPAM,
referer : 'https://wx.qq.com/?&lang=zh_CN&target=t',
}
await page.setExtraHTTPHeaders(extraHeaders)
}

private getWeChromeExtensionOptionsArgs (): string[] {
/**
* Issue #127: Can we support UOS with puppeteer?
* https://github.com/wechaty/wechaty-puppet-wechat/issues/127
* https://github.com/adamyi/wechrome - Chrome extension to unblock web wechat
* https://stackoverflow.com/a/51434261/1123955
*/
const weChromeExt = path.join(
__dirname,
'..',
'wechrome'
)
if (!fs.existsSync(weChromeExt)) {
throw new Error('WeChrome extension not found.')
}

const extensionOptionsArgs = [
`--load-extension=${weChromeExt}`,
`--disable-extensions-except=${weChromeExt}`,
]

return extensionOptionsArgs
// add RequestInterception
await page.setRequestInterception(true)
page.on('request', async req => {
const url = new URL(req.url())
if (url.pathname === '/cgi-bin/mmwebwx-bin/webwxnewloginpage') {
const override = {
headers: {
...req.headers(),
...uosHeaders,
},
}
await req.continue(override)
return
}
await req.continue()
})
}

public async readyAngular (page: Page): Promise<void> {
Expand Down Expand Up @@ -1050,7 +1041,10 @@ export class Bridge extends EventEmitter {
public entryUrl (cookieList?: Protocol.Network.Cookie[]): string {
log.verbose('PuppetWeChatBridge', 'cookieDomain(%s)', cookieList)

const DEFAULT_URL = 'https://wx.qq.com'
/**
* `?target=t` is from https://github.com/wechaty/wechaty-puppet-wechat/pull/129
*/
const DEFAULT_URL = 'https://wx.qq.com?target=t'

if (!cookieList || cookieList.length === 0) {
log.silly('PuppetWeChatBridge', 'cookieDomain() no cookie, return default %s', DEFAULT_URL)
Expand Down

0 comments on commit 4a66a06

Please sign in to comment.