You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:55:46