Python开发天气应用 用户输入城市发起requests请求报400错误
天气查询应用400状态码问题排查与修复方案
核心问题根因
- 手拼URL未做编码是最高概率诱因
你目前把城市名直接硬拼进URL的写法,没有符合HTTP规范对请求地址的编码要求。哪怕你控制台打印出来的城市名内容完全正确,只要城市名里包含空格(例如"New York")、特殊字符、首尾残留的输入空格,硬拼得到的请求地址会带有未转义的特殊字符,服务器解析时会截断字符串、判定请求格式非法,最终返回400状态码。 - 输入框取值时机错误
你贴的错误代码逻辑里,是在刚创建输入框控件的阶段就调用city_input.get()取值,此时窗口还未渲染完成、用户根本没有输入内容,拿到的是空字符串,对应的请求参数缺失,必然触发400错误。
可直接落地的修复方法
- 彻底放弃手动拼接完整URL的写法,改用requests内置的参数传值机制,工具会自动完成所有必要的URL编码,从根源上避免格式问题:
# 把原本硬拼在URL里的城市名、appid密钥两个参数放到字典里,不要手动拼地址 request_params = { "你原URL中承载城市名的参数名": city_name, "appid": api_key } response = requests.get(base_url, params=request_params, headers=headers) - 调整代码执行顺序,把
city_input.get()取值、发请求的逻辑绑定到按钮点击的回调函数里,等用户完成输入、触发点击动作时再读取输入框内容,避免初始化阶段读到空值。 - 取值后做简单的非空校验:如果拿到的城市名是空字符串,直接提示用户重新输入,不要触发后续的接口请求,减少无效请求。
内容的提问来源于stack exchange,提问作者Charles Pine
相关产品推荐
相关产品推荐

