我可以允许在HTTP头使用NSUrlSession原始unicode
本文关键字:NSUrlSession 原始 unicode HTTP 我可以 | 更新日期: 2023-09-27 18:06:48
我正在构建一个NSUrlSession如下:
NSUrlSessionConfiguration sessionCfg = NSUrlSessionConfiguration.CreateBackgroundSessionConfiguration("mySpecialSessionName");
NSUrlSessionDelegate sessionDelegate = new MySessionDelegate();
urlSession = NSUrlSession.FromConfiguration(sessionCfg, sessionDelegate, NSOperationQueue.MainQueue);
和调用后台下载自定义HTTP头:
NSMutableUrlRequest mutableRequest = new NSMutableUrlRequest();
mutableRequest.HttpMethod = "POST";
mutableRequest.Url = NSUrl.FromString(someEndpoint);
mutableRequest["MyCustomHeader"] = someStringWithUnicodeChars;
mutableRequest.Body = NSData.FromString(somePostBody);
NSUrlSessionDownloadTask downloadTask = m_UrlSession.CreateDownloadTask(mutableRequest);
downloadTask.Resume();
然而,头值字符串似乎在超过255的第一个字符处被截断。例如,头值:
<>之前SupeЯ Σario兄弟之前被服务器接收为
<>之前表之前当在xamarin上使用。net HttpClient时,unicode报头字符串成功地将其未修改地发送到服务器。然而,我想利用NSUrlSession的后台下载功能。
(我意识到在HTTP报头中支持unicode是偶然的,但由于本例中的HTTP服务器是一个特定的自定义服务器,目前不支持base64编码之类的东西,因此需要传递原始字符串)
我不知道你是否能做到这一点,但我想到了两件事:
- 这里的内容相当于在URL请求上调用setValue:forKey:。我认为这不会达到你的预期。请尝试调用setValue:forHTTPHeaderField:方法。
- 在指定自定义头值之前尝试指定编码,例如:[theRequest setValue:@"…;utf - 8字符集= - type"forHTTPHeaderField: @];
如果这两种方法都没有帮助,那么您可能必须以某种方式对数据进行编码。我建议使用URL编码,因为在服务器端实现它要比Base64简单得多。对于iOS端,请参阅此链接了解如何对字符串进行url编码:
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/WorkingwithURLEncoding/WorkingwithURLEncoding.html