开一贴,讲讲最新nodejs逆向官网的思路

我给你一版python的吧。按照这个思路走就行了

import base64
import json

import requests
import websocket

token = ”xxxxx"

session = requests.Session()

session.proxies.update({
    "http": "http://127.0.0.1:10809",
    "https": "http://127.0.0.1:10809"
})


def getWebsocketUrl(token):
    headers = {
        'authority': 'chat.openai.com',
        'accept': '*/*',
        'accept-language': 'en-US',
        'authorization': f'Bearer {token}',
        'origin': 'https://chat.openai.com',
        'referer': 'https://chat.openai.com',
        'sec-ch-ua': '"Not A(Brand";v="99", "Google Chrome";v="121", "Chromium";v="121"',
        'sec-ch-ua-arch': '"x86"',
        'sec-ch-ua-bitness': '"64"',
        'sec-ch-ua-full-version': '"121.0.6167.185"',
        'sec-ch-ua-full-version-list': '"Not A(Brand";v="99.0.0.0", "Google Chrome";v="121.0.6167.185", "Chromium";v="121.0.6167.185"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-model': '""',
        'sec-ch-ua-platform': '"Windows"',
        'sec-ch-ua-platform-version': '"15.0.0"',
        'sec-fetch-dest': 'empty',
        'sec-fetch-mode': 'cors',
        'sec-fetch-site': 'same-origin',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
    }

    response = session.post('https://chat.openai.com/backend-api/register-websocket', headers=headers)

    return response.json()['wss_url']


wsUrl = getWebsocketUrl(token)

ws = websocket.WebSocket()
ws.connect(wsUrl)

headers = {
    'authority': 'chat.openai.com',
    'accept': 'text/event-stream',
    'accept-language': 'en-US',
    'authorization': f'Bearer {token}',
    'content-type': 'application/json',
    # 'cookie': 'intercom-device-id-dgkjq2bp=bcf47cab-15e3-4f54-9a78-8e708bed66cf; ajs_user_id=user-fQcvDMwirblchS5MYBGn8bfq; ajs_anonymous_id=5c616424-4e98-46ad-9d06-9a6ad3f03ad3; _account=personal; cf_clearance=0htPzCWPYeDLUdU9aLT7AEeyvH4P2ET9fUKNJQQvVbU-1706205646-1-ATio0WAyg5vMyuz8d0+Z6snrI58mJoooZouRP1OMaQXjbhzqt/bCBA91VeifqLNlLjdc3Qtnf57D4QRaXwZL8N8=; oai-did=765154cb-10b1-45fe-8b75-708ac209c96c; __Host-next-auth.csrf-token=64f0235fce7ac02499d5f7a00e7ac469cb2af302ac428d4e82baad067aabd349%7C6eb442edd290e15547bfa891d0e95c8f03d128173f4b22508184541a96604d43; _cfuvid=xAxV5.xGI38y6UszkNohZ.oLiCnCpVYeauAA5E7f5mM-1708182958810-0.0-604800000; cf_clearance=.RPSwUeFuXiuPlbNeOdqEa0d48n8ysJ.yBNJSxkjjLs-1708182961-1.0-ARWDeFs2GxNswnM9vUB3B/N7QCRkk511tQwJ4096WWVRdAtfFM2TEknZ9S/lVoAki6l7ywg/mJg5PvYT1Ec4N+I=; __Secure-next-auth.callback-url=https%3A%2F%2Fchat.openai.com; __Secure-next-auth.session-token=eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..RI9NhPBtiR0obSzZ.ZBlbAtmOdwqDn2au7LexS1rnhfA6hTU43SquzFUgvCKoLWySonxhmfMASrIFjtbhUuVcT8XtLllZMNUdadQPISMZ-jd95DGxkPPallkqL8-r2RPQFLCyHy6Mk9-zRgj2WTETJygHC99Vjd2baW8bc5aOtt7JEzyp0iwayqv5a-T-oxqIYdktUWioAApsIoNovUKWXLqhaDYzMINcNK0hkLs6lUAgOndVr_DAX1crDoGdMdWx8s-LyBToo-ygZo4jSy7kbfWY-1FKfvAxM1n20N0rLnyh4dh6FEK4Tnr2kSuoNhg9QQ6fK-xpnwR4h9c_O2DgjOOVIG4qX907UKZoI3pfS89pw6Vd31ieuv6cHqNnVnk0XB1AvasHf4ZI1iSTLe_z6KQhaMEXJaMHdz7ot-vk0iLPKGamxNjRfuA6OmteS9Bn_rl6QswMWbFqs5OUJ7LwWHrpeUqeIihy4q-FcFFfqes4AgSBEmveuCJnmsjCoKJnrVmE2CIvBn1LUNl4076300UZEw3PobD4NCsdCgGqCxrm5dPM5mnjNHIWIh4zSUapqS0pDSaoktoOfRE1FPh1LSsBc3hgO_D7O_H9SJCkbqPOdiMJHa4Gb-L_StOfHMTqagrKumdgAPv0o7r0fLX3TKWX-ri7OT7fLyT1JKFqGpz1R8VxGz--qU_ygV0C6hw8PXHL_nq0526runxfdvpGbmi5EuDP1hpMhzoEILGUBHNo_Gu31BFJuZLffnP8SvoOFx4C8a7SzNY9B6qHjV11rip7aY6L0CPjNnPSMTCDaLjhdpDgmcdv2v13K1PNDoP2hT7l-Fq4enS1RujE0LMNHPcyHsrHUDsM0br7N0wU30v-BkGgSr7NAbJmlu2A9VojNZBjzFdY2hM0D1WYhGsQrodS9IKcoivprHziRaYqVxbENFBtU7MEQ6PHnM-s_c7m2Nscibu6bGNwKiI6UHuc9MspWficKyjN4L0lGOjKIS_yGYV_S-qtazkzbfJ6-T-WQf5x5PSSdp1pG6znFvjwjFnRT-iajXo0hIgZB1p-VK1Hp5C_qyBCNE5ABux6ff4n1ffah1WA_oWovbwW0tLBnjOcFMyAdVONN9Ne_LulsSVXLFgfHgdKvIbuPbfgRTNAtY7WiaemyEpCQWi7Z85NUFxupauaenlU2oUlUJjl_STMfDCch44gOIcenUO5tyL8cocnmfMJ2LtnRY3q-sXOQeskmDIWS7YYZjL_2i7JnF2Fcdm6-j7lS3BtmEVTeni3TeGZdt78VX3Xifb8Go_l5WwLDGUSpZS3XTnSmc5_1qZXKI9GA3PzTdoBr5cNnsVPP7e2F4lB7y1w2maLpjXtMb3eAjJufBmvpz5IMs9WUxMF_5C7rJljZ6ZPAO37l-XEe3DbZ2zIH-spt6DJcpJgoUkl2bgWiujSmC3CfQir6CJun4H58Utm_XtM8i7LoyOgelRglYqgu-iwz4iCs4cIjc0mLfJ0xDYA-bGtIk2TK761-q85KIx9I3kmT_CqjEn8KOekjnZ9ebDKMYCQI8xrAP8I7hUR_t37H-NxChU9PG1ck1DS0D2XCnXeG5FWoDVoaK8F2UFoSa3R0CNAJse6r8xzydqF_mmVU2swMJ2I8NYn-DFmWAJ6N0_gYvnR3Ez7Q284llkeEJbfB-BLRm5jLAIK_Pwgp8E-7cvEh1yhXT-ByHGvkUh5zeyCa9L0LLjeqO-qWmjkYDnUYiveDl3um3Iw1KKSOaeHXbUYyr-PnPQkloqeCQLGus7ROhm-AgsUE4CWQZj_vqikMiPou5X1M5_6nb5SVNxVeCbwWNwnuvFYmmAQEmC8hCOZaDvdzFNw7K6Mq9sMUnaoxxg4sySjiEAU1dBnjx265NGr2Oj8fHouAS3CsHhE7Mr5J8Whkj_Z9hah_seQs9iz9A8nNUbm4luvPXxoo8KeI-ya7EwfELwrzQRRjOSdJnous1vuGQmam_JmGshTg1AIZtMeyrYdk6mze6PNk5P66RmH5VWgA0_KpH34YW8m1SM5k7mLTr2WrzdUdtZVN51DkYETJrnxT_2yH6LQ5ykKDf_A5YvxJxaG_smo07nvI2zP6VMAfXf51u0XDf03HTpMQR-ADocoIYqeKlgeD1uZRqhXda3WR8QqnpVQpFypoFNXZyheLgy4bF-WQyFCGIX-lTGoEbjK7NEYvgmSDzOtmvb4u1eYX-BwMlaaMEW6Vfw8IWIFsenpKw7jhnQqiG18rNPBVfdLPNyuMy84PsJfq6YqOZ9jl9aozwS6twv92bpEWqMOeWl-AbcR5PBthcsbg5rTqaG3zq3zQIm9QAkM37UBR8IzfK5AhqD3U_XfQIuCCphORQp0zJK1DU2On_HEUhugSeEMbNq7DPcEqgXptH-UVlDp4j5NoIOybWefaby3aGBSwb1rpbLTTTvU9ZKuDRNwfXKRjcfLZ3EjhKdREI1ak7xu2ghSV1Qekv3Q6DKezwJNljhQQZftQy5EL6U5uD87j9b0w5vTRKXXUtxeUH3zGvyJURfYwpqFKI3iWq1PoiHiXvorpOszm085yw-XNG7bFeh0wHajIuQAo1w_uN18zq57YaaRIn9UNUNTfhuHb_JLhrS3WpSkJQSoJsQ97qXiCNO_kDwLPvphGg-GggIRXME5uiWMXGHuhuk5UmdmtwEuvfW0lgi9HdJLRhrYJnXdiA03Yj_c_ZO3pFFexsNe76s7rUIdt9nnRU_Uo6GOsaSQvadPwmrYDBT7BOcK-l2ORFL9eqpTImWzzh8gvXZ-C18Xky_bwCaQgrY9OZYT3jAin1kCmSXyQljJdtc_aEmmGI4ToFVKS91C8B9RQ7uvjD34yfKpXx0O8uY89hu00OyV_PNQ7eBiCopgv5JLIwqkrqEhzlhBdGFvyg-gU6rYFOgjxPduSxTiE9pnIQ.coH_jcBlGjdBWT0mbLKx3A; intercom-session-dgkjq2bp=a1FoTmd0ZFFKd0NRbjZtQU8zV1ExbDBlVE1BTWFJNld5MHJzNWpHNEFEbk9hbC9mcnQrcWtjejNvTUhYdEg5My0tU2UzK2pHOXN0NzRxQzhkYi8rUTU1UT09--cbfc60bffd98413e0459d755f7e9e9cef0ed7a63; __cflb=0H28vVfF4aAyg2hkHEuhVVUPGkAFmYvkB8J9x8LjwRf; __cf_bm=2rS.JywZBuPlCdpfrmm.Y_tikoFy7EZHzeyOtFrMZM0-1708184912-1.0-AaZHGwFnYgL7jPC0F/+VObrpQUpe8lxtl7eWbY+6dyF42CK1xKFcYK11xzdXynW2Il+mqd9CyVGuPd3itoNQELY=; _umsid="Z0FBQUFBQmwwTlZTdEZnbkV4ejk1WU9WR1JiYnFIY3NuQUtmWlo0bnZBWkdMWUx1NTE4TXpsOV91Rk1fNFRPblIwTFplcTZXRW5LNjJ4d25Db0ZQSXdYcWNpbk5UR2V1OFhxNEFtaVAwS0hiVElnVzZ5aHhUY210ck5FZnZBQlQwY01oeExWREZ1YktxZmJ5ZkdQSnNRbkkycGc0dFo4LTFhVEFJeUlLMzY1YlBXWlE0WVRvZUhPWUkzQzlFcm5IQ2RSbFNoUXVrdWNHUzhRM1k2WWxVTGtNdEZsMDVfWnVRdllqVWlqSjRVbTZBNkMtZnYyb09CRT0="; _dd_s=rum=0&expire=1708186227689',
    'origin': 'https://chat.openai.com',
    'referer': 'https://chat.openai.com/',
    'sec-ch-ua': '"Not A(Brand";v="99", "Google Chrome";v="121", "Chromium";v="121"',
    'sec-ch-ua-arch': '"x86"',
    'sec-ch-ua-bitness': '"64"',
    'sec-ch-ua-full-version': '"121.0.6167.185"',
    'sec-ch-ua-full-version-list': '"Not A(Brand";v="99.0.0.0", "Google Chrome";v="121.0.6167.185", "Chromium";v="121.0.6167.185"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-model': '""',
    'sec-ch-ua-platform': '"Windows"',
    'sec-ch-ua-platform-version': '"15.0.0"',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
}

json_data = {
    'action': 'next',
    'messages': [
        {
            'id': 'aaa2b760-4354-4351-8ba3-a15c5b61bc08',
            'author': {
                'role': 'user',
            },
            'content': {
                'content_type': 'text',
                'parts': [
                    '请说出10句感人情话,并给出中英日韩三版的',
                ],
            },
            'metadata': {},
        },
    ],
    'parent_message_id': '7924624b-1051-4a01-b679-781a8e04d153',
    'model': 'gpt-4-mobile',
    'arkose_token': '31517b952483f05f3.8200789602|r=us-west-2|meta=3|metabgclr=transparent|metaiconclr=%23757575|guitextcolor=%23000000|pk=0A1D34FC-659D-4E23-B17B-694DCFCF6A6C|at=40|sup=1|rid=13|ag=101|cdn_url=https%3A%2F%2Ftcr9i.openai.com%2Fcdn%2Ffc|lurl=https%3A%2F%2Faudio-us-west-2.arkoselabs.com|surl=https%3A%2F%2Ftcr9i.openai.com|smurl=https%3A%2F%2Ftcr9i.openai.com%2Fcdn%2Ffc%2Fassets%2Fstyle-manager',
    'timezone_offset_min': -480,
    'suggestions': [],
    'history_and_training_disabled': True,
    'conversation_mode': {
        'kind': 'primary_assistant',
        'plugin_ids': None,
    },
    'force_paragen': False,
    'force_rate_limit': False,
}

response = session.post('https://chat.openai.com/backend-api/conversation', headers=headers, json=json_data)

data = response.json()
_len = 0
while True:
    result = ws.recv()
    decode = json.loads(result)
    if decode['conversation_id'] == data['conversation_id'] and decode['response_id'] == data['response_id']:
        if decode['body'] == "ZGF0YTogW0RPTkVdCgo=":
            break
        else:
            try:
                # print("接收中...")
                chat_msg = base64.b64decode(decode['body']).decode('utf-8')[6:]
                result = json.loads(chat_msg)
                if result['message']['author']['role'] == "assistant" and \
                        result['message']['content']['content_type'] == 'text':
                    text = result['message']['content']['parts'][0][_len:]
                    print(text, end="")
                    _len = len(result['message']['content']['parts'][0])
            except:
                continue

ws.close()


2 个赞

牛啊,我直接抱走了哈哈哈

谢谢大佬 :sob: :sob: :sob:

1 个赞

让GPT给你个websocket的demo就行啦 :laughing: :laughing:

我是一点都不懂websocket,所以GPT效果就会很差,所以有人说GPT是做乘法,再次感谢大佬啊

看硬了

6,不愧是大将军

2 个赞

论坛里的人,说话又好听,懂得还多

1 个赞

还幽默,又大方,不藏着掖着 :laughing: :laughing:

2 个赞

对头

可以,都靠大佬前人铺路

1 个赞

666

学习了

1 个赞

点个赞!!!

1 个赞

感谢大佬的分享,学习!

学习!

有点硬

有点硬

1 个赞

马克

想请问下大佬,这样做的目的是为了干啥呢