如何在HTTP.post中分离Host与相对URL发送请求?
如何在Julia的HTTP.jl中分离Host与相对URL发送请求
问题背景
原始HTTP报文示例:
POST /v1.0/oauth2/accessToken HTTP/1.1 Host:api.dingtalk.com Content-Type:application/json { ... }
通常使用HTTP.post时需指定完整URL:url = "https://api.dingtalk.com/v1.0/oauth2/accessToken",但希望将相对URL /v1.0/oauth2/accessToken 和Host信息 "api.dingtalk.com" 分离,通过HTTP.request()实现该需求。
尝试的代码及报错
尝试的代码:
url = "/v1.0/oauth2/accessToken" headers = Dict([( "host" => "api.dingtalk.com", "Content-Type" => "application/json" )]) body = Dict([ ... ]) r = HTTP.post(url, headers, body)
报错信息:
ERROR: ArgumentError: missing or unsupported scheme in URL (expected http(s) or ws(s)): v1.0/oauth2/accessToken
解决方案
要实现Host与相对URL的分离,需使用HTTP.request()的多参数调用方式,直接指定scheme、host和请求路径(target),而非传入不完整URL。示例代码如下:
using HTTP, JSON3 # 拆分后的参数 scheme = "https" host = "api.dingtalk.com" target = "/v1.0/oauth2/accessToken" headers = [ "Content-Type" => "application/json" ] # 构造请求体 body = Dict( "appKey" => "your_app_key", "appSecret" => "your_app_secret" ) # 发送请求 response = HTTP.request( "POST", scheme, host, target, headers, JSON3.write(body) )
关键说明
- 必须明确指定
scheme(http/https),这是底层请求的必要参数 - 请求体需序列化为JSON字符串,这里使用
JSON3.write(),也可替换为JSON.json()(需导入JSON包) - Host头会自动根据传入的
host参数生成,若需自定义Host,可在headers中手动添加,会覆盖自动生成的内容
内容的提问来源于stack exchange,提问作者Xlin0mu
相关产品推荐
相关产品推荐

