如何用R向本地FastAPI发送POST请求及httr包404报错解决
问题解决办法
核心原因
你遇到的404问题最主要的诱因是httr默认调用系统代理配置,本地回环地址的请求被转发到代理服务器后无法找到对应本地服务,从R请求日志中的Proxy-Connection: Keep-Alive字段可以确认请求走了代理。Postman、Python requests默认会自动跳过本地地址的代理,因此可以正常响应。
其次如果你实际需要发送带JSON的POST请求,当前FastAPI侧仅定义了GET方法的/test路由,请求方法不匹配也会触发404状态码。
具体解决步骤
方案1:单次请求临时禁用代理
在httr请求参数中添加use_proxy(NULL)即可跳过代理,对应示例代码如下:
如果你需要发送GET请求:r <- GET("http://127.0.0.1:4000/test", use_proxy(NULL), verbose())如果你需要发送带JSON的POST请求:
library(httr) r <- POST( url = "http://127.0.0.1:4000/test", use_proxy(NULL), body = list(参数1 = "值1", 参数2 = "值2"), encode = "json", verbose() )同时需要在FastAPI侧补充对应的POST路由定义,示例如下:
from fastapi import FastAPI from pydantic import BaseModel import uvicorn app = FastAPI() class TestReq(BaseModel): 参数1: str 参数2: str @app.get("/test") async def get_test(): return "Hello" @app.post("/test") async def post_test(body: TestReq): return {"接收参数": body.dict()} if __name__ == '__main__': uvicorn.run(app, host='127.0.0.1', port=4000, debug=True)方案2:全局配置跳过本地代理
在系统的代理设置中,将127.0.0.1、localhost加入代理例外列表,配置完成后所有本地请求无需额外加参数即可正常访问。
内容的提问来源于stack exchange,提问作者lakshman
相关产品推荐
相关产品推荐

