python自定义websocket包headers请求头

有一种反爬手段“检测headers请求头中字段的排序”,websocket方式发请求也不例外。

python实现websocket连接,可以使用py包websocket-client

安装

pip install websocket-client

使用

import websocket


def on_message(ws, message):
    print(ws)
    print(message)


def on_error(ws, error):
    print(ws)
    print(error)


def on_close(ws):
    print(ws)
    print("### closed ###")


websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://127.0.0.1:8888/track",
                            on_message=on_message,
                            on_error=on_error,
                            on_close=on_close)

ws.run_forever()

 请求测试默认会添加请求头

python自定义websocket包headers请求头_第1张图片

 如何修改并固定排序规则,重写get_handshake_headers函数

from websocket import _handshake


def get_handshake_headers(resource, url, host, port, options):
    headers = ['GET /api/challenge64 HTTP/1.1', 'Host: www.python-spider.com', 'Connection: Upgrade',
               'Pragma: no-cache', 'Cache-Control: no-cache',
               'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
               ' Chrome/113.0.0.0 Safari/537.36',
               'Upgrade: websocket', 'Origin: https://www.python-spider.com', 'Sec-WebSocket-Version: 13',
               'Accept-Encoding: gzip, deflate, br', 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8',
               'Cookie: sessionid=sm85gembpmofo5mhzustgiwgcwkgk5dm;', 'Sec-WebSocket-Key: y1H/4iwgf/4st9XYL0j+mg==',
               'Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits', '', '']
    key = 'y1H/4iwgf/4st9XYL0j+mg=='
    return headers, key

_handshake._get_handshake_headers = get_handshake_headers

测试

python自定义websocket包headers请求头_第2张图片

大功告成! 

你可能感兴趣的:(随笔大杂烩,python,websocket)