AS语言获取URL参数详细解析

需积分: 9 1 下载量 58 浏览量 更新于2024-09-09 收藏 4KB TXT 举报
"本文主要介绍AS语言如何获取URL参数,并提供了相关的JavaScript方法作为参考。" 在AS(ActionScript)编程中,如果你需要从一个URL中提取参数,通常会结合使用JavaScript,因为AS自身并不直接支持从URL中解析参数。这里我们将讲解如何利用AS与JavaScript的交互来获取URL参数。 首先,我们需要通过`ExternalInterface.call`调用JavaScript函数来获取当前页面的URL。这可以通过以下代码实现: ```as3 var urlPath:String = ExternalInterface.call("eval", "window.location.href"); ``` 这段代码会返回完整的URL字符串,包括协议、主机名、路径、查询字符串和哈希值。 接着,我们可以通过`split`方法将URL拆分为两部分,以便获取查询字符串: ```as3 var param_info:String = urlPath.split("?")[1]; ``` `param_info`现在包含了URL中所有参数的部分,形如`?key1=value1&key2=value2`。 在JavaScript中,我们可以进一步解析这个查询字符串来获取单独的参数。这里是一些JavaScript中获取URL属性的方法: 1. `window.location.href`:获取完整的URL。 2. `window.location.protocol`:获取URL的协议,例如`http:`或`https:`。 3. `window.location.host`:获取URL的主机名,包括域名和端口号(如果有的话)。 4. `window.location.port`:获取URL的端口号。如果使用默认的80或443端口,这个属性可能为空字符串。 5. `window.location.pathname`:获取URL的路径部分,不包括查询字符串和哈希。 6. `window.location.search`:获取URL的查询字符串,即`?`后面的部分。 7. `window.location.hash`:获取URL的哈希值,即`#`后面的部分。 在AS中,如果你是在加载SWF文件时需要获取URL参数,可以使用`LoaderInfo`对象来获取。例如: ```as3 var loaderInfo:LoaderInfo = LoaderInfo(this.root.loaderInfo); var urlVars:URLVariables = new URLVariables(loaderInfo.parameters); ``` `loaderInfo.parameters`属性会返回一个包含SWF加载时URL参数的对象。 总结来说,AS获取URL参数通常依赖于与JavaScript的交互,通过`ExternalInterface.call`调用JavaScript的`window.location`属性,或者在加载SWF时使用`LoaderInfo`对象。理解这些概念和方法对于处理含有参数的URL至关重要。

import requests import json import time def get_real_url(room_id): # 获取直播间的真实流媒体地址 url = 'https://api.live.bilibili.com/xlive/web-room/v1/playUrl/playUrl' params = { 'cid': room_id, 'qn': '10000', 'platform': 'web', 'https_url_req': 1, 'ptype': '16', 'reftype': '0', 'ts': int(time.time()) } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299', 'Referer': f'https://live.bilibili.com/{room_id}' } response = requests.get(url, params=params, headers=headers) response_json = json.loads(response.content.decode('utf-8')) real_url = response_json['data']['durl'][0]['url'] return real_url def get_danmu(room_id): # 获取直播间弹幕 url = f'wss://broadcastlv.chat.bilibili.com:2245/sub' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299', 'Referer': f'https://live.bilibili.com/{room_id}' } real_url = get_real_url(room_id) # 通过websocket连接到B站的弹幕服务器 ws = create_connection(url, headers=headers) # 发送认证消息 uid = int(1e14) + int(2e14 * random.random()) auth_data = { 'uid': uid, 'roomid': room_id, 'protover': 2, 'platform': 'web', 'clientver': '1.14.3', 'type': 2, 'key': real_url.split('?')[1], } auth_json = json.dumps(auth_data).encode('utf-8') ws.send(auth_json) # 循环接收弹幕 while True: try: recv_data = ws.recv() recv_json = json.loads(gzip.decompress(recv_data).decode('utf-8')) # 处理收到的数据 if recv_json['cmd'] == 'DANMU_MSG': danmu = recv_json['info'][1] print(danmu) except Exception as e: print(e)房间号输在哪?

2023-02-16 上传