首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当方法不是POST时,NSURLRequest无法处理HTTP正文?

当方法不是POST时,NSURLRequest无法处理HTTP正文。NSURLRequest是Foundation框架中的一个类,用于创建和管理URL请求。它是一个不可变对象,用于封装URL请求的相关信息,包括URL、HTTP方法、HTTP头部字段等。

在HTTP协议中,POST方法用于向服务器提交数据,而GET方法用于从服务器获取数据。当使用POST方法时,可以将数据作为HTTP请求的正文部分发送给服务器。而当使用其他HTTP方法(如GET、PUT、DELETE等)时,NSURLRequest默认不会处理HTTP正文,因为这些方法通常用于获取或修改资源,而不需要发送数据。

如果需要在使用非POST方法时发送HTTP正文,可以使用NSMutableURLRequest类来创建可变的URL请求对象。NSMutableURLRequest继承自NSURLRequest,可以通过设置HTTPBody属性来添加HTTP正文数据。同时,还需要设置HTTP方法为POST以外的其他方法,以告知服务器使用相应的方法处理请求。

下面是一个示例代码,演示如何使用NSMutableURLRequest发送HTTP正文:

代码语言:swift
复制
// 创建URL对象
let url = URL(string: "https://example.com/api/resource")

// 创建可变的URL请求对象
let request = NSMutableURLRequest(url: url!)

// 设置HTTP方法为PUT
request.httpMethod = "PUT"

// 设置HTTP正文数据
let bodyData = "This is the request body".data(using: .utf8)
request.httpBody = bodyData

// 发送请求
let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in
    // 处理响应数据
}
task.resume()

在上述示例中,我们创建了一个可变的URL请求对象NSMutableURLRequest,并设置了HTTP方法为PUT。然后,通过设置HTTPBody属性,将字符串数据转换为二进制数据,并作为HTTP正文添加到请求中。最后,使用URLSession发送请求并处理响应数据。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)、腾讯云对象存储(COS)、腾讯云CDN加速等。您可以通过访问腾讯云官网(https://cloud.tencent.com/)了解更多关于这些产品的详细信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

NSURLSession与NSURLConnection区别

执行上传任务,NSURLSession与NSURLConnection一样需要设置POST请求的请求体进行上传。...))completionHandler这个方法,这个方法接收一个参数,完成处理代码块,这个代码块有一个NSData参数resumeData,如果resumeData非空,我们就保存这个对象到视图控制器的... * 无法修改默认的连接行为  * 身份验证的能力有限  * 任务在后台无法上传和下载  */ + (NSURLSession *)sharedSession; 2.自定义 Session 对象 /...任务,要手动调用此方法,任务才会开启,而NSURLConnection默认开启。...请求 /**  *  简单 Post 请求,POST 和 GET 请求在于对 request 的处理不同,其余和 GET 相同  */ - (void)postWithSharedSession {

1.5K60
  • NSURLSession 所有的都在这里(一)

    ,你掌握了NSURLSession对于iOS网络处理理解的就会有点深度了,而不是停留在AF的层面,理解了NSURLSession再去看AFNetWorking的源码会有很大的帮助。 ...HTTP请求方式 POST GET 等 */ @property (nullable, readonly, copy) NSString *HTTPMethod; /*!...关于该字段的更多解释将在后面的HTTP版本简介中展开。       Content-Length: body的长度,如果body为空则该字段值为0。该字段一般在POST请求中才会有。      ...为此属性设置的值应考虑HTTP头和正文数据或正文流的大小。如果未指定值,则系统将使用NSURLSessionTransferSizeUnknown。该属性由系统用来优化URL会话任务的调度。...强烈建议开发人员尽可能提供近似的上限或确切的字节数,而不是接受默认值。 2、客户期望接收的字节数的期待上限。 为此属性设置的值应考虑HTTP响应头和响应主体的大小。

    2.1K30

    iOS开发·网络请求方法总结复习(NSURLConnection,NSURLSession,AFNetworking)

    [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:url] delegate:self]; } 代理实现方法示例 #...,该请求对象默认包含了请求头信息和请求方法(GET) 2)如果要发送的是POST请求,则不能使用该方法 */ NSURLSessionDataTask *dataTask...didReceiveData:(NSData *)data { //3.请求完成(成功|失败)的时候会调用该方法,如果请求失败,则error有值 -(void)URLSession:(NSURLSession...+接口名称(login) //POST请求需要修改请求方法POST,并把参数转换为二进制数据设置为请求体 //1.创建会话对象 NSURLSession *session...HTTPS与HTTP的不同点 前面涉及到的GET和POST都属于HTTP请求,现在苹果的APP都推荐支持HTTPS,这就需要先配置一下证书,然后在NSURLSession(或者NSURLConnection

    3.3K30

    iOS_AFNetworking 结构解析+用例分析+源码阅读

    根据URL创建request NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"]; NSURLRequest *request...2.某个属性的getter方法使用其他属性的值计算返回值, 重写keyPathsForValuesAffectingValueForKey:方法, 返回其他属性的集合,详情见AFHTTPRequestSerializer...NSSecureCoding而不是NSCoding 解码方法是: decodeObjectOfClass:而不是decodeObjectForKey: 因为序列化后的数据可能被篡改, 若不指定Class..., decode出来的可能不是原来的对象, 有潜在风险 帮我们组装好了一些HTTP请求头 如AFHTTPRequestSerializer的初始化方法: Content-Type:请求参数类型...一般我们请求都会按 key=value 的方式带上各种参数, GET 方法参数直接拼在 URL 后面,POST 方法放在 body 上, NSURLRequest没有封装好这个参数的序列化,只能我们自己拼好字符串

    55420

    iOS网络编程之四——请求类NSURLRequest使用详解

    二、NSURLRequest类中常用方法和属性总结 //通过类方法创建默认的请求对象 /* 通过这种方式创建的请求对象 默认使用NSURLRequestUseProtocolCachePolicy缓存逻辑...请求类除了在初始化时可以设定一些属性,创建出来后则大部分属性都为只读的,无法设置与修改。...请求对象与HTTP/HTTPS协议相关请求的属性设置         一下属性的设置必须使用NSMutableURLRequest类,如果是NSURLRequest,则只可以读,不可以修改。...NSString *)value forHTTPHeaderField:(NSString *)field; //设置http请求体 用于POST请求 @property (nullable, copy...) NSData *HTTPBody; //设置http请求体的输入流 @property (nullable, retain) NSInputStream *HTTPBodyStream; //设置发送请求是否发送

    1.3K20

    AFNetworking 源码阅读(v3.2.1)

    回调,我们通过它找到delegate,再用delegate调用相关代理方法,然后再在代理方法中回调相关的block,具体实现如下 在NSURLSessionDataDelegate回调,下面是获取数据完成的代理...userInfo]; }); }); }); } } 这样就实现每一个任务都有它自己单独的代理,完成后即进行回调,还有一个好处是,任务完成...,它是并行队列,在多个回调同时触发,可以同时处理,可以加快数据的处理速度 static dispatch_queue_t url_session_manager_processing_queue()...,completionGroup属性为nil,默认就使用它 static dispatch_group_t url_session_manager_completion_group() {...: dispatch_get_main_queue(), ^{ // 处理完成后,在completionQueue存在,则completionQueue中回调,否则在主队列中回调

    2.1K20

    从AFNetworking源码分析到应用全解 原

    下面我们要来看下内部代理AFURLSesstionManagerTaskDelegate类的作用,需要注意AFURLSesstionManagerTaskDelegate是一个类,并不是协议,其除了处理上面介绍的...在使用AFNetworking进行网络请求,如果你有过抓包,你一定会发现,在发送的普通HTTP请求的HEAD中默认包含了许多信息,其实这些都是AFHTTPRequestSerizlizaer类做的,他默认会向请求头中添加...实际使用的内存超过最大容量,缓存池会自动清理到期望容量。...收到系统的内存警告,也会唤起清除内存操作。...以前我在设计全局Loading,通常直接为他暴漏显隐两个接口,处理多个并行请求的时候就很尴尬了,因为你无法保证Loading在最后完成的请求结束后再隐藏。

    3.1K51

    【IOS】总结-AFNetworking学习笔记

    ,我们可以创建 AFURLConnectionOperation 并把它安排进 NSOperationQueue,通过设置 NSOperation 的新属性completionBlock,指定操作完成如何处理...BOOL discretionary NS_AVAILABLE(NA, 7_0); allowsCellularAccess 属性指定是否允许使用蜂窝连接, discretionary属性为YES表示程序在后台运作由系统自己选择最佳的网络连接配置...不再需要连接,可以调用Session的invalidateAndCancel直接关闭,或者调用finishTasksAndInvalidate等待当前Task结束后关闭。...NSURLSessionDataTask *dataTask, NSCachedURLResponse *proposedResponse))block; 6.2.22 设置所有消息都传输完成执行的...请求方法 /** Creates and runsan `NSURLSessionDataTask` with a `POST` request.

    1.4K30

    NSURLSession 所有的都在这里(二)

    这种方法在两种情况下被调用: 1、远程服务器请求客户端证书或Windows NT LAN Manager(NTLM)身份验证,允许您的应用程序提供适当的凭据 2、会话首先建立与使用SSL或TLS...具有延迟开始时间的后台会话任务(由earliestBeginDate属性设置)准备就绪,将调用此方法。只有在等待网络负载请求可能变陈旧并需要被新请求替换,才应实现此委托方法。...这种委托方法在两种情况下被调用: 1、如果使用uploadTaskWithStreamedRequest创建任务,则提供初始请求正文流: 2、如果任务因身份验证质询或其他可恢复的服务器错误需要重新发送包含正文流的请求...委托的URLSession:dataTask:didReceiveResponse:completionHandler:方法决定将数据请求的处置更改为下载,会话将调用此委托方法为你提供新的下载任务。...3、提供的响应来自服务器,而不是缓存。 4、会话配置的缓存策略允许缓存。 5、提供的NSURLRequest对象的缓存策略(如果适用)允许缓存。

    1.8K30

    iOS开发之NSURLProtocol的那些坑

    ,NSURLProtocol对象在停止加载时调用该方法 + (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request,可选方法...NSURLRequest *)request { /* 防止无限循环,因为一个请求在被拦截处理过程中,也会发起一个请求,这样又会走到这里,如果不进行处理,就会造成无限循环 */...NSURLProtocol在拦截NSURLSession的POST请求不能获取到Request中的HTTPBody,这个貌似早就国外的论坛上传开了,但国内好像还鲜有人知,据苹果官方的解释是Body是NSData...而且Body数据为二进制数据这招也没辙了,因为Header里都是文本数据,另一种方案就是用一个NSDictionary或NSCache保存没有请求的Body数据,用URL为key,最后方法就是别用NSURLSession...使用NSURLProtocol,在那两个类方法可以发送同步网络请求,而实例方法,如startLoading则进入死锁,直至超时,原因是执行实例方法所在的线程并没有启动runloop,而NSURLConnection

    2.6K91

    源码分析之AFNetworking(二)

    文档翻译: AFHTTPSessionManager继承自AFURLSessionManager,提供了便捷的方法用于HTTP请求,一个baseURL,根据相对路径,可以很方便地进行GET/POST或者其他请求...url做了一下格式化处理,请求序列化默认用的是AFHTTPRequestSerializer进行序列化,返回结果的序列化默认用的是AFJSONResponseSerializer 下面这个方法是AFHTTPSessionManager...,请求方式都一样,最终都汇总到一个方法, AFHTTPSessionManager的封装步骤 1、根据不同的HTTP Method和不同的请求参数序列化方式,以及URL合成,从AFURLRequestSerialization...生成datatask; 2.给datatask绑定一个代理AFURLSessionManagerTaskDelegate; 依次来查看一下这两个步骤: 在生成NSURLSessionDataTask对象采用了...去处理,否则回到主线程处理

    33610

    iOS-网络编程(二)文件上传和断点离线下载

    NSURLRequest的子类,NSURLRequest默认的请求方法是GET,当我们需要修改请求方法,请求头的时候就要用可变的NSMutableURLRequest 使用NSURLConnection...创建NSURLRequest NSURLRequest默认的请求方法是GET,当我们需要修改请求方法POST的时候就要用可变的NSMutableURLRequest,并设置请求方式,请求头和请求体。...实现代码 // 注意:获取总文件大小 这个获取的是每次返回数据的数据大小,但是当我们暂停,在重新开始下载的时候,返回的就是剩余数据文件的大小,因此在当我们计算进度的时候就不准确了 // 所以我们需要再次回到这个方法的时候...POST请求 NSURLSession *session = [NSURLSession sharedSession]; NSURL *url = [NSURL URLWithString:@"http...resetWithCompletionHandler:^{ // 释放做的操作 }]; } 关于网络请求的基本知识可以查看iOS-网络编程(一)HTTP协议 ✨本文借鉴了很多前辈的文章

    2.3K80

    IOS开发系列——UIWebView专题【整理,部分原创】

    shouldStartLoadWithReuqest等方法并不会被调用。...其解决方法需要Javascript和navtive code一起来做,其基本原理可参考这片文章,其流程是在Javascript handler中每创建Ajax的请求,需要将这段js存在ajax_handler.js...http://blog.csdn.net/fengbingyang/article/details/7484453 方案一: 最近在使用ios中的UIWebView显示本地网页,遇到如下问题:...,页面高度超过屏幕高度,如果页面顶部和初始加载的位置不同(进行过滚动),则每次添加高亮,页面就重新跳到初始加载的位置,而不是保持当前位置。...方案二:在shouldStartLoadWithRequest方法中进行url相等判断,然后对于#号url进行延迟执行loadNavigationTitle的处理: - (BOOL)webView:(

    92140

    AFNetworking3的常用操作

    :@"POST" URLString:URLString parameters:parameters error:nil]; 实际请求的样子 POST http://example.com/ Content-Type...POST http://example.com/ Content-Type: application/json {"foo": "bar", "baz": [1,2,3]} 指定Response的序列化方式...serializer]; 如果不指定 默认如果返回的格式是json类型 返回的responseObject就是NSDictionary类型 可以类似这样取值responseObject[@"msg"] 如果不是...json格式 就为nil 如果返回格式不固定 或者自己处理 就添加上面的序列化方式 建议 如果结果确定为JSON 就不添加上面的代码 不确定 自己处理就需要添加 自己序列化的代码 NSDictionary...://www.psvmc.cn/upload"]; NSURLRequest *request = [NSURLRequest requestWithURL:URL]; NSURL *filePath

    63640

    【IOS开发基础系列】UIWebView专题

    其解决方法需要Javascript和navtive code一起来做,其基本原理可参考这片文章,其流程是在Javascript handler中每创建Ajax的请求,需要将这段js存在ajax_handler.js...http://blog.csdn.net/fengbingyang/article/details/7484453     方案一:         最近在使用ios中的UIWebView显示本地网页...,页面高度超过屏幕高度,如果页面顶部和初始加载的位置不同(进行过滚动),则每次添加高亮,页面就重新跳到初始加载的位置,而不是保持当前位置。         ...方案二:         在shouldStartLoadWithRequest方法中进行url相等判断,然后对于#号url进行延迟执行loadNavigationTitle的处理: - (BOOL).../shaobo8910/article/details/52701598 3.2 常见问题 3.2.1 webView不在最上层无法接受到原生发给js的处理逻辑     问题:        如果WebView

    34230

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券