python - 了解 Python HTTP 流

标签 python http streaming python-requests chunked-encoding

我正在努力使用 Python 和 Requests 访问流式 API。

API 的内容:“我们启用了一个流式端点,以使用持久的 HTTP 套接字连接来请求报价和交易数据。来自 API 的流式数据包括发出经过身份验证的 HTTP 请求并使 HTTP 套接字保持打开状态持续接收数据。”

我是如何尝试访问数据的:

s = requests.Session()
def streaming(symbols):
    url = 'https://stream.tradeking.com/v1/market/quotes.json'
    payload = {'symbols': ','.join(symbols)}
    return s.get(url, params=payload, stream=True)  
r = streaming(['AAPL', 'GOOG'])

请求文档 here展示两件有趣的事情:使用生成器/迭代器来处理分块数据,在数据字段中传递。对于流数据,它建议使用如下代码:

for line in r.iter_lines():
    print(line)

两者似乎都不起作用,尽管我不知道在生成器函数中放入什么,因为示例不清楚。使用 r.iter_lines(),我得到输出:"b'{"status":"connected"}{"status":disconnected"}'"

我可以访问 header ,响应是 HTTP 200,但无法获取有效数据,或者找不到有关如何在 python 中访问流式 HTTP 数据的明确示例。任何帮助,将不胜感激。 API 建议使用 Jetty for Java 来保持流打开,但我不确定如何在 Python 中执行此操作。

header :{'connection': 'keep-alive', 'content-type': 'application/json', 'x-powered-by': 'Express', 'transfer-encoding': 'chunked'}

最佳答案

正如 verbsintransit 所说,您需要解决您的身份验证问题,但是您的流媒体问题可以通过使用此示例来解决:

s = requests.Session()

def streaming(symbols):
    payload = {'symbols': ','.join(symbols)}
    headers = {'connection': 'keep-alive', 'content-type': 'application/json', 'x-powered-by': 'Express', 'transfer-encoding': 'chunked'}
    req = requests.Request("GET",'https://stream.tradeking.com/v1/market/quotes.json',
                           headers=headers,
                           params=payload).prepare()

    resp = s.send(req, stream=True)

    for line in resp.iter_lines():
        if line:
            yield line


def read_stream():

    for line in streaming(['AAPL', 'GOOG']):
        print line


read_stream()

if line: 条件正在检查 line 是实际消息还是只是保持连接。

关于python - 了解 Python HTTP 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822342/

相关文章:

python - 将表达式转换为二叉树的算法

java - 放心 Java : How to get header user and pass from setup method

python - 如何通过 ZeroMQ 套接字发送 OpenCV 视频片段?

java - 使用 java 将 JSON 文档流式传输到 Rest Web 服务

apache-kafka - Kafka Streaming 应用程序在与 Kafka 连接后仅读取最新消息

Python 的 __reduce__/copy_reg 语义和有状态的 unpickler

python - 如何将函数(BigramCollocationFinder)应用于 Pandas DataFrame

python - django 1.8 在 CentOs 6.5 服务器上不工作

http - 如何使用SRV记录指向80以外的端口

php - 分析 Web 应用程序速度