requests关于Exceeded 30 redirects

写了几行平平无奇的代码,想要获取json数据

import requests

url=‘https://image.baidu.com/search/acjson?tn=resultjson_com&logid=10924524703716171320&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E9%87%91%E5%9F%8E%E6%AD%A6&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=&copyright=&word=%E9%87%91%E5%9F%8E%E6%AD%A6&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&nojc=&cg=star&pn=60&rn=30&gsm=3c&1635587116468=’

resp=requests.get(url)    

json_data=resp.json()

 然后就报错了:requests.exceptions.TooManyRedirects: Exceeded 30 redirects.

根据网友的解答加上了allow_redirects=False

 因为错误显示重定向超过三十个,因此allow_redirects=False,关闭重定向

此时代码变成了:

import requests

url=‘https://image.baidu.com/search/acjson?tn=resultjson_com&logid=10924524703716171320&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E9%87%91%E5%9F%8E%E6%AD%A6&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=&copyright=&word=%E9%87%91%E5%9F%8E%E6%AD%A6&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&nojc=&cg=star&pn=60&rn=30&gsm=3c&1635587116468=’

resp=requests.get(url,allow_redirects=False)    

json_data=resp.json()

然而还是报错了:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

 看来得解码,于是:

resp=requests.get(url,allow_redirects=False).content.decode('utf-8')

又报错:因为解码后不再是response了,所以不具有json()方法

 因此问题不是出在解码上,而是get()并没有成功运行得到response。

真正的问题在关闭了重定向以后,页面不再跳转。

简单来说就是没有与服务器建立会话,页面重定向成了环形的死循环。即你的原始URL重定向一个没有新​​的URL B,其重定向到C,它重定向到B,等​​等。

文章的结尾提到加请求头来保持会话的持久性。

http头部没有编码方式,requests默认使用自己的编码方式。也是很任性,具体关于requests的乱码行为的出现原因及解决方案,在这篇博客有详细介绍,可以看一下。

https://www.cnblogs.com/billyzh/p/6148066.html。

正确的代码:

import requests

url=‘https://image.baidu.com/search/acjson?tn=resultjson_com&logid=10924524703716171320&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E9%87%91%E5%9F%8E%E6%AD%A6&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=&copyright=&word=%E9%87%91%E5%9F%8E%E6%AD%A6&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&nojc=&cg=star&pn=60&rn=30&gsm=3c&1635587116468=’

resp=requests.get(url,allow_redirects=False,headers=headers)    

json_data=resp.json()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值