37,743
社区成员
发帖
与我相关
我的任务
分享现在手头有个收集数据的url:
放入浏览器就可执行,这个api会返回一些数据,但是当第一次页面显示数据的时候,是没有返回响应的,连接还是一直保持着,然后大约每9秒会在此返回一段数据,大致情况如下:
1.在浏览器输入上面url会立刻返回json格式数据(只是部分截取)

但是尽管部分数据返回了,但是响应还是没有中断,连接依然持续中:


页面依然会返回新数据,

2.在postman中的效果如下:

点击蓝色按钮发送之后,在 11:03:59会返回黄色数据行,再过几秒返回绿色,之后是蓝色数据行,蓝色和绿色是在黄色数据行返回之后,产生的新数据,所以数据是OK的,但是现在请求并未返回相应,连接持续中,右上角的按钮是close状态。只有当手动点击的close按钮,连接才会终止。然后结果如下:

这里是python代码:
import requests
url = "https://59.push2.eastmoney.com/api/qt/stock/details/sse?fields1=f1,f2,f3,f4&fields2=f51,f52,f53,f54,f55&mpi=100&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&pos=-0&wbp2u=|0|0|0|web&secid=0.000001"
def poll_data():
try:
response = requests.get(url)
if response.status_code == 200:
data = response.text
# 处理返回的数据
print(data)
else:
print("请求失败:", response.status_code)
except requests.exceptions.Timeout:
print("请求超时")
poll_data()
python代码在执行到response = requests.get(url)这一行之后就一直等待了,不会有response返回。
前面都是问题的描述,我的需求是,如何在发送请求之后,第一次得到数据之后,就返回响应,因为我只需要发送请求之前的数据,现在的问题的响应无法返回,如果设置timeout的话,返回的数据就是null。
感觉CSDN论坛被做烂了,好久没在这里正经回答过问题了。
你看这个网络请求的应答头,就知道咋回事了:

具体可以搜一下even-stream,这个跟websocket原理差不多,http建立链接后,作为长连接不断开,服务端会一直往客户端在此连接上推送数据,已达到类似实时监控之类的效果。
所以你的代码没有返回就可以理解了吧。所以你应该建立连接,然后获取连接上的输入流,监控流中的数据,然后达到你的业务目的。具体python代码我不会,相信你可以写出来。