使用来自firebase的python套接字获取数据

时间:2017-03-05 14:19:25

标签: python sockets firebase firebase-realtime-database

我尝试使用套接字库而不是python请求库来访问Firebase上的数据库。贝娄我有一个简单的例子,返回

b'Invalid Firebase Request'
Time 0.10938119888305664

我主要是尝试减少客户端之间的延迟('应该发布的不是')和火基服务器

import socket
import ssl
import time
import requests



HOST = '<my database link>.firebaseio.com'  
PORT = 443    
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    ss = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_TLSv1)
    ss.connect((HOST, PORT))
    for i in range(1):
        ts = time.time()    
        request = "GET /<A database child>.json \nHost: "+ HOST+"\n\n"
        ss.send(request.encode())
        result = ss.recv(4096)
        #print (result)
        while (len(result)>0):
            print (result)
            result = ss.recv(4096)
        print ('Time '+ str(time.time()-ts))

当我将范围增加到1以上时,程序也不会发出多个请求。这是为什么?

1 个答案:

答案 0 :(得分:1)

看起来您正在尝试发送格式错误的HTTP(S)请求。有效的HTTP 1.1请求如下所示:

request = "GET /<A database child>.json HTTP/1.1\r\n" \
          "Host: " + HOST + "\r\n"                    \
          "Connection: keep-alive\r\n"                \
          "\r\n"

收到无效请求后,服务器显然会关闭连接,因此您无法再读取(也不会写入)套接字ss