gpt4 book ai didi

python - 如何在websocket python中发送 'Headers'

转载 作者:太空宇宙 更新时间:2023-11-03 19:43:15 42 4
gpt4 key购买 nike

我该怎么做

这是我的代码


import websockets


async def test():
async with websockets.connect('ws://iqoption.com') as websocket:
response = await websocket.recv()
print(response)
# Client async code

提示是,我可以发送此 header 以在服务器中进行身份验证

标题

    'Host':'iqoption.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0',
'Accept' : '*/*',
'Accept-Encoding': 'gzip, deflate',
'Sec-WebSocket-Version' : '13',
'Origin' : 'https://iqoption.com',
'Sec-WebSocket-Key': 'iExBWv1j6sC1uee2qD+QPQ==',
'Connection' : 'keep-alive, Upgrade',
'Upgrade': 'websocket'}

我可以使用其他代码来完成此操作,但消息仍然使用 tls 加密

proxies = {"http": "http://127.0.0.1:8080", "https": "http://127.0.0.1:8080"}
urllib3.disable_warnings()

r = requests.get('https://iqoption.com/echo/websocket', stream=True,headers = Headers, proxies=proxies, verify=False)
#r = requests.get('https://iqoption.com/echo/websocket', stream=True,headers = Headers)
s = socket.fromfd(r.raw.fileno(), socket.AF_INET, socket.SOCK_STREAM)


def receive_and_print():
#for message in iter(lambda: s.recv(1024).decode("utf-8", errors="replace"), ''):
for message in iter(lambda: s.recv(1024).decode( errors="replace"), ''):
print(":", message)
print("")
import threading
background_thread = threading.Thread(target=receive_and_print)
background_thread.daemon = True
background_thread.start()

while 1:
s.send(input("Please enter your message: ").encode())
print("Sent")
print("")

有什么建议吗?

最佳答案

我认为您目前对 WebSockets 缺乏基本的了解,正如您之前的实验所示。 WebSocket 不是普通的套接字。 WebSocket 是在 HTTP 握手后创建的一些类似套接字的想法。您不能像在 requests 之后尝试那样从连接中获取套接字,而是必须显式地使用 RFC 6455 中定义的 WebSocket 应用程序协议(protocol)。 .

也就是说,使用像 websockets 这样的库要好得多。但您仍然必须使用实际的 WebSocket 端点作为目标,而不仅仅是同一服务器上的某个任意 URL。本例中的终点不是ws://iqoption.comwss://iqoption.com/echo/websocket,即更长的路径和 wss://而不是 ws://

如果没有正确的 URL,您会收到错误消息,您似乎会将其解释为身份验证问题。但这里根本不涉及身份验证。一旦您使用正确的端点,它就可以正常工作,无需发送特定的 header :

async def test():
async with websockets.connect("wss://iqoption.com/echo/websocket") as websocket:
response = await websocket.recv()
print(response)

关于python - 如何在websocket python中发送 'Headers',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60308749/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com