python执行url请求,遇到一个奇怪的问题,求大神指点。(都是实际数据操作,含代码)

shoppo0505 2023-07-24 11:20:59

现在手头有个收集数据的url:

https://59.push2.eastmoney.com/api/qt/stock/details/sse?fields1=f1,f2,f3,f4&fields2=f51,f52,f53,f54,f55&pos=-0&secid=0.000001

放入浏览器就可执行,这个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。

 

...全文
382 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

感觉CSDN论坛被做烂了,好久没在这里正经回答过问题了。
你看这个网络请求的应答头,就知道咋回事了:

img

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

shoppo0505 2023-07-25
  • 举报
回复
@失足成万古风流人物 非常感谢,搞定了,发送request的时候添加stream=True就能返回数据了,然后得到第一次的数据之后就可以终止request

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧