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

如何在Cro::HTTP::Client中覆盖默认Content-Type?

解决Cro::HTTP::Client请求中覆盖默认Content-Type的问题

你遇到的问题是因为客户端默认的Content-Type会和请求参数里的content-type拼接,导致媒体类型解析失败,同时客户端的content-type属性是不可变字符串,无法直接修改。以下是两种无需新建客户端、也不用全局修改的正确覆盖方式:

方法一:通过请求的headers参数覆盖

在post调用中直接通过headers指定Content-Type,这会覆盖客户端的默认设置,避免拼接问题:

my $response = await $!ua.post(
    "add",
    headers => { Content-Type => 'multipart/form-data' },
    body => [Cro::HTTP::Body::MultiPartFormData::Part.new(
        headers => { content-type => $mimetype },
        name => $name,
        body-blob => $data,
    )]
);

方法二:手动构建请求对象发送

如果需要更灵活的请求控制,可以直接创建Cro::HTTP::Request对象,指定完整的请求头和体后用客户端发送:

my $request = Cro::HTTP::Request.new(
    method => 'POST',
    uri => $!ua.base-uri ~ "add",
    headers => { Content-Type => 'multipart/form-data' },
    body => [Cro::HTTP::Body::MultiPartFormData::Part.new(
        headers => { content-type => $mimetype },
        name => $name,
        body-blob => $data,
    )]
);
my $response = await $!ua.send($request);

为什么之前的方法失效?

  • 直接在post中传content-type参数时,Cro会将客户端默认值与请求参数值拼接,生成无效的application/json,multipart/form-data媒体类型
  • 客户端的content-type属性是不可变字符串(immutable Str),因此无法通过赋值修改

内容的提问来源于stack exchange,提问作者VZ.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:16:08