WLClient addGlobalHeader 不起作用

Posted

技术标签:

【中文标题】WLClient addGlobalHeader 不起作用【英文标题】:WLClient addGlobalHeader does not work 【发布时间】:2015-02-09 13:03:40 【问题描述】:

我正在尝试设置全局标头以将特定的安全信息发送到后端适配器。这似乎不适用于使用 Objective-C 的原生 ios 应用程序。我敢肯定,我错过了一些东西。

这是我的简单示例:

NSLog(@"Invoking Procedure...");
WLProcedureInvocationData *myInvocationData = [[WLProcedureInvocationData alloc] initWithAdapterName:@"Rs-s-reader" procedureName:@"getStories"];
MyInvokeListener *invokeListener = [[MyInvokeListener alloc] initWithController: self];
[[WLClient sharedInstance] addGlobalHeader:@"header1" headerValue:@"header1"];
[[WLClient sharedInstance] invokeProcedure:myInvocationData withDelegate:invokeListener];

发送的标头根本没有改变。

【问题讨论】:

你是想用这个来改变 Cookie 头,还是只是随机的头? 【参考方案1】:

您如何检查标头是否已发送? 哪个版本的 MobileFirst?

我为重现所做的步骤:

运行 MobileFirst Studio 6.3.0.00.20150130-1638 我已经下载了 ios 示例中的调用 (https://ibm.biz/BdEw79)

在我的doInvokeProcedure 中添加了您的addGlobalHeader 行:

- (IBAction)doInvokeProcedure:(UIButton *)sender 
[self updateView:@"Invoking Procedure..."];
NSLog(@"Invoking Procedure...");
WLProcedureInvocationData *myInvocationData = [[WLProcedureInvocationData alloc] initWithAdapterName:@"Rs-s-reader" procedureName:@"getStories"];
MyInvokeListener *invokeListener = [[MyInvokeListener alloc] initWithController: self];
[[WLClient sharedInstance] addGlobalHeader:@"header1" headerValue:@"header1"];
[[WLClient sharedInstance] invokeProcedure:myInvocationData withDelegate:invokeListener];


在 WireShark 中捕获流量:

POST /InvokingAdapterProceduresNative/apps/services/api/InvokingAdapterProceduresiOS/iOSnative/query HTTP/1.1
Host: localhost:10080
X-Requested-With: XMLHttpRequest
User-Agent: InvokingAdapterProceduresiOS/1.0 (iPhone Simulator; iOS 8.1; Scale/2.00)/WLNativeAPI/6.3.0.00.20150130-1638
Cookie: WL_PERSISTENT_COOKIE=279ea643-f731-4c5e-8a59-74ed4842b3d8; JSESSIONID=0000x8PNWpTDWKW73FnPaw9oTAm:42599173-098f-4ab1-b562-68c6a8e1f345
WL-Instance-Id: 7kreem49ql20l2pdf1fuq9q0kc
x-wl-clientlog-osversion: 8.1
x-wl-clientlog-env: iOSnative
header1: header1
x-wl-clientlog-deviceId: 18A44BA7-4DF9-411B-9577-5954C8E44921
x-wl-clientlog-model: x86_64
x-wl-analytics-tracking-id: 6D6B72FD-820C-4EF8-AE45-205723E464FF
Content-Length: 112
Connection: keep-alive
x-wl-clientlog-appname: InvokingAdapterProceduresiOS
x-wl-platform-version: 6.3.0.00.20150130-1638
Accept-Language: en
x-wl-clientlog-appversion: 1.0
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Accept-Encoding: gzip, deflate
x-wl-app-version: 1.0

注意中间的header1: header1

【讨论】:

Nathan,我使用了完全相同的示例,再次运行它,我也可以在 WireShark 中看到标题。奇怪的是,标题没有在输出中列出,如您在此处看到的: "接受语言" = en; "User-Agent" = "InvokingAdapterProceduresiOS/1.0 (iPhone Simulator; iOS 8.1; Scale/2.00)/WLNativeAPI/6.3.0.00.20141121-0732"; "X-Requested-With" = XMLHttpRequest; "x-wl-app-version" = "1.0"; "x-wl-clientlog-appname" = InvokingAdapterProceduresiOS; “x-wl-clientlog-appversion”=“1.0”; “x-wl-clientlog-deviceId”=“310E52D3-9D07-4EFD-B19B-1FBA9EC70503”; “x-wl-clientlog-env”=iOSnative; “x-wl-clientlog-model”=“x86_64”; “x-wl-clientlog-osversion”=“8.1”; “x-wl-平台版本”=“6.3.0.00.20141121-0732”; “输出”是什么意思。输出什么?你是如何生成这个 JSON 字符串的? 这个 xcode 日志很可能是在添加自定义标头之前发生的。我相信自定义标头是在发送请求之前的最后一分钟添加的。

以上是关于WLClient addGlobalHeader 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在没有 WLClient::connect() 的情况下接收 GCM 推送

IBM Worklight 6.0 - 如何更改 wlclient.properties 中的 wlServerHost 值

weblogic 与jms事例配置

MFP 7.1 禁用直接更新?

MobileFirst 客户端属性似乎没有改变

IBM Worklight 6.0 - worklight studio 在哪里获取嵌入式服务器的 IP 地址