防止 NSURLSession 默认 HTTP 标头

2023-12-13

我正在尝试向服务器发送一个非常具体的 HTTP 请求(即定义exactHTTP 标头集),但是NSURLSession不断“有帮助地”插入一堆 HTTP 标头,例如Accept, Accept-Language and Accept-Encoding.

考虑以下 Playground (Swift 2.x),它将请求发送到仅回显发送的 HTTP 标头的服务:

import Foundation
import XCPlayground

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true

let url = NSURL(string: "http://httpbin.org/headers")!
let request = NSMutableURLRequest(URL: url, cachePolicy: .ReloadIgnoringLocalCacheData, timeoutInterval: 30000)
let configuration = NSURLSessionConfiguration.ephemeralSessionConfiguration()
let session = NSURLSession(configuration: configuration)

let task = session.dataTaskWithRequest(request) { (data: NSData?, response: NSURLResponse?, error: NSError?) in
    print(NSString(data: data!, encoding: NSUTF8StringEncoding))
    XCPlaygroundPage.currentPage.finishExecution()
}
task.resume()

可以看到有三个Accept正在发送的标头。我怎样才能防止这种情况发生?

我尝试使用设置标题request.setValue(nil, forHTTPHeaderField: "Accept-Language")但这被忽略了。尝试将其设置为"",但没有什么好处。我也尝试过操纵HTTPAdditionalHeaders属性于NSURLSessionConfiguration,但没有爱。

如何得到NSURLSession不那么有帮助吗?


我怀疑你所要求的是否可能。 NSURLSession(和 NSURLConnection)自动提供许多标头,这就是其中之一。

也没有正当理由删除它们。自原始 HTTP/0.9 规范以来,所有这三个标头都已成为规范的一部分(https://www.w3.org/Protocols/HTTP/HTRQ_Headers.html)。任何服务器绝对没有理由不正确处理这些问题或完全忽略它们。

话虽如此,如果您为这些字段提供了错误的值(默认值可能是错误的),服务器可能会拒绝为您提供结果。要解决这个问题,首先要弄清楚服务器实际上要提供什么类型的数据,然后在 Accept 标头中指定该值而不是默认值。

例如,您可以将 Accept 设置为“application/json”或其他变体之一(正确的 JSON 内容类型是什么?) 如果您需要 JSON 数据。

也就是说,如果你really必须避免发送这些标头,您始终可以打开套接字,手动构造请求,然后发送它。假设服务器不需要分块编码,这很容易做到。 (然而,分块编码是一个巨大的恐怖,所以如果你的服务器将其发回,你几乎不得不求助于将 libcurl 添加到你的项目中并使用它来发出请求。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止 NSURLSession 默认 HTTP 标头 的相关文章

随机推荐

  • PHP - 注意:未定义的索引:[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 注意 未定义的变量 和 注意 未定义的索引 我正在尝试制作一个在数据库 MySQL 中注册用户的注册表单 该代码应该注册 Name Surname Username Password Emai
  • 正确,Matplotlib 中的“全长”左右箭头?

    考虑以下简单示例 import matplotlib pyplot as plt fig plt figure ax fig add subplot ax plot 0 0 ax grid ax set xlim 0 10 ax set y
  • 在.net mvc 中保存数据

    我正在实现一个带有结果页面支持分页的搜索模块 NerdDinner 提供的示例将页码作为 Index 操作的参数传递 每次用户点击不同的页码时 该操作都会使用页码执行查询 我的问题是 我的搜索需要更多的标准 例如价格 材料 型号等 而不仅仅
  • 从 Windows Azure 连接到远程 SQL Server 2008

    我尝试从 Windows Azure 辅助角色连接到 SQL Server 2008 实例 不是 SQL Azure 而是远程托管的 SQL Server 2008 标准版 但收到以下错误消息 System Data SqlClient S
  • 在 onActivityResult 中检测电子邮件是否已发送

    我想在我的 onActivityResult 方法中检测人们是否已发送电子邮件或按下后退按钮或丢弃它 我怎样才能做同样的事情 我正在这样做 String reciepients result toArray new String resul
  • 实体框架 - 在事务内的“SaveChanges”之前检索 ID

    在实体框架中 在调用 SaveChanges 之前 是否有任何方法可以检索事务内新创建的 ID 身份 我需要第二次插入的 ID 但它总是返回为 0 ObjectContext objectContext IObjectContextAdap
  • 在Mongodb中存储100MB的大文件

    我想在 MongoDB 中存储 100MB 到 1GB 的大文件 就像 BLOB 对象一样 以后可以更轻松地检索它 我使用的编程语言是 PHP 请从这个意义上指导我 为此 您需要使用 GridFS 因为通常 MongoDB 文档限制为 16
  • JSF 模板:呈现的页面缺少 DOCTYPE

    TL DR 我无法让 DOCTYPE 标头出现在我的 JSF 页面上 我刚刚继承了一个 JSF 1 2 项目 该项目在 IE 下存在一些显示问题 我是 JSF 的新手 但我认为问题源于这样一个事实 渲染的页面 来自 查看源代码 不包含正确的
  • 合并两个不同时间粒度的时间序列

    我有两个包含时间序列数据的 CSV 文件 我想将这两个合并到一个文件中 File1 具有以 1 分钟为间隔的周期性数据 File2 具有非周期性的事件触发数据 File2 中数据的时间戳可能与 File1 中的数据一致 也可能不一致 我想合
  • 访问策略不可用

    我正在尝试在 Azure Key Vault 中输入访问策略 但收到消息 访问策略不可用 此密钥保管库的访问配置设置为基于角色的访问控制 要添加或管理您的访问策略 请转至访问控制 IAM 页面 在azure中 我如何输入访问策略 我已经添加
  • 如何在Sql中创建用户定义的类型

    我不知道如何创建具有可选约束的域 我试过 CREATE DOMAIN idx INT CHECK VALUE gt 100 AND VALUE lt 999 但遇到了以下错误 CREATE DROP 或 ALTER 语句中使用了未知的对象类
  • 如何使用 AngularDart 根据类型和名称进行依赖注入?

    我有两个服务 每个服务都需要一个不同的WebSocket 作为构造函数参数 我想使用 AngularDart 的依赖注入来传递 WebSocket 连接 但我不能单独依赖类型 因为我有两个 WebSocket 如何注释或指定每个服务应使用哪
  • asp.net mvc ajax post返回404未找到

    我正在尝试使用 jquery ajax 函数执行 ajax 请求 我有一个非常奇怪的行为 我的文件夹结构是这样的 我的客户端 ajax 调用 在 UserManagement Index cshtml 中 如下所示 var rolename
  • 带有多个选择框的 jQuery 验证插件

    我正在使用 jQuery Validate 来验证我的表单 问题是我有一个带有多个选择框 动态数字 的表单 并且它有一个动态名称 gt answers question id 我见过一些脚本 当有固定名称时 您可以使用它来寻址所有输入字段
  • 将 Apache ServiceMix 连接到 Websphere MQ

    我正在尝试从部署为 Apache Service Mix 上的 OSGI 包的驼峰路由连接到 websphere MQ 队列管理器 我已经部署了 Websphere MQ 附带的 IBM OSGI 包 并按如下方式配置了 Spring 配置
  • 如何在Python中对范围函数的值求和[重复]

    这个问题在这里已经有答案了 基本上我想总结表达式 k 5 的结果x 17 但 x 不同 例如 k 53 17 k 5 4 17 等等 到目前为止 我的代码如下所示 结果需要是来自范围 3 9 的 for x in range 3 9 k 5
  • 使用 jq 如何将一个非常大的 JSON 文件拆分为多个文件,每个文件都有特定数量的对象?

    我有一个很大的 JSON 文件 我猜有 400 万个对象 每个顶层都有几个嵌套在其中的级别 我想将其拆分为多个文件 每个文件包含 10000 个顶级对象 保留每个文件内部的结构 jq应该可以做到吧 我不知道怎么办 所以数据是这样的 id 1
  • 在 MVC 中提供用户通知/确认的推荐方法是什么?

    我遇到的一个常见场景是在用户执行操作后向他们提供通知 确认以告知他们成功 例如 假设用户在反馈表上提供反馈 然后单击提交反馈 您可能想显示 感谢您的反馈 消息after您已经执行了一些验证 例如他们在数据库中有有效的电子邮件 一些伪代码 p
  • 多个RDD的Spark联合

    在我的猪代码中我这样做 all combined Union relation1 relation2 relation3 relation4 relation5 relation 6 我想对火花做同样的事情 然而 不幸的是 我发现我必须继续
  • 防止 NSURLSession 默认 HTTP 标头

    我正在尝试向服务器发送一个非常具体的 HTTP 请求 即定义exactHTTP 标头集 但是NSURLSession不断 有帮助地 插入一堆 HTTP 标头 例如Accept Accept Language and Accept Encod