我正在尝试从 Bitstamp Websocket v2.0 API 获取实时比特币价格数据。如果需要的话去哪里获取证书?如果证书下载是自动的,我如何确保python可以验证收到的证书?
Bitstamp 网站上关于此事的文档相当缺乏。以下是 Bitstamp api 文档中的引用:
“一旦通过 websocket 握手(使用 HTTP 升级标头)打开连接,您就可以订阅所需的频道。”
Bitstamp API 文档:https://www.bitstamp.net/websocket/v2/
尝试在 websockets 文档中搜索:https://websockets.readthedocs.io/en/stable/
我研究过 websockets 和 ssl。现在我对握手有了一些了解,但经过多次尝试和搜索后我仍然不知道该怎么做。
import asyncio
import websockets
async def bitstamp_ticker():
async with websockets.connect(
'wss://ws.bitstamp.net', ssl=True) as websocket:
pass
asyncio.get_event_loop().run_until_complete(bitstamp_ticker())
Run Code Online (Sandbox Code Playgroud)
根据我在 websocket 文档中的理解,添加 ssl=True 应该足以建立安全连接。但似乎 Python 3.6 中内置的证书颁发机构无法识别位戳证书。这就是错误发生的原因?
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Rust 读取 8K 32 位 OpenEXR HDR 文件。使用 Image crate 读取文件:
use image::io::Reader as ImageReader;
let img = ImageReader::open(r"C:\Users\Marko\Desktop\HDR_Big.exr")
.expect("File Error")
.decode()
.expect("Decode ERROR");
Run Code Online (Sandbox Code Playgroud)
这导致Decode ERROR: Limits(LimitError { kind: InsufficientMemory })
读取 4K 或更小的文件效果很好。
我认为缓冲会有所帮助,所以我尝试了:
use image::io::Reader as ImageReader;
use std::io::BufReader;
use std::fs::File;
let f = File::open(r"C:\Users\Marko\Desktop\HDR_Big.exr").expect("File Error");
let reader = BufReader::new(f);
let img_reader = ImageReader::new(reader)
.with_guessed_format()
.expect("Reader Error");
let img = img_reader.decode().expect("Decode ERROR");
Run Code Online (Sandbox Code Playgroud)
但结果是同样的错误。 这是图像箱本身的问题吗?可以避免吗?
如果解码图像后对解决方案有任何影响,我将使用如下原始数据:
let data: Vec<f32> = img.to_rgb32f().into_raw();
Run Code Online (Sandbox Code Playgroud)
谢谢!