GJS中如何为Soup.Message添加自定义请求消息头
GJS 中为 Soup.Message 添加自定义请求头的实现方式
Soup.Message的request_headers属性为只读,指的是不能直接替换该属性本身的引用,并不是说属性指向的头对象不可修改。该属性返回的是一个已初始化的Soup.MessageHeaders实例,直接调用该实例的内置方法即可完成自定义头的增删改操作。
常用操作API
- 覆盖/设置请求头:调用
replace(headerName, headerValue)方法,如果对应头已存在会直接覆盖原有值,适合设置唯一值的头(比如鉴权头、自定义业务头) - 追加请求头:调用
append(headerName, headerValue)方法,如果对应头已存在会追加多值,不会覆盖原有内容 - 删除指定请求头:调用
remove(headerName)方法 - 读取单个请求头值:调用
get_one(headerName)方法获取对应头的第一个值
代码示例(libsoup 3.0,GJS 常用版本)
import Soup from 'gi://Soup?version=3.0'; import GLib from 'gi://GLib'; // 初始化请求 const session = new Soup.Session(); const message = new Soup.Message({ method: 'POST', uri: Soup.URI.new('https://your-api-endpoint.com/test') }); // 添加自定义头 message.request_headers.replace('X-Custom-Auth', 'your-custom-token'); message.request_headers.replace('X-App-Version', '1.0.0'); message.request_headers.append('Accept-Language', 'zh-CN'); // 发送请求 const responseBytes = await session.send_and_read_async(message, GLib.PRIORITY_DEFAULT, null);
注意:不要尝试直接给
message.request_headers赋值普通对象/新的MessageHeaders实例,这类操作会因为属性只读触发报错,只需要操作该属性返回的已有实例的内置方法即可。
如果使用旧版 libsoup 2.4,添加头的逻辑完全一致,仅初始化Message的写法有区别:
// libsoup 2.4 初始化Message的写法 const message = Soup.Message.new('GET', 'https://example.com'); // 加头逻辑和3.0版本完全相同 message.request_headers.append('X-Custom-Header', 'test-value');
内容的提问来源于stack exchange,提问作者ilmix
相关产品推荐
相关产品推荐

