首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将数据追加到POST NSURLRequest

将数据追加到POST NSURLRequest
EN

Stack Overflow用户
提问于 2011-05-27 15:01:34
回答 6查看 109.7K关注 0票数 85

如何将数据附加到现有的POST NSURLRequest?我需要添加一个新参数userId=2323

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-05-27 15:20:28

如果你不想使用第三方类,那么下面是如何设置帖子主体的……

代码语言:javascript
复制
NSURL *aUrl = [NSURL URLWithString:@"http://www.apple.com/"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl
                                         cachePolicy:NSURLRequestUseProtocolCachePolicy
                                     timeoutInterval:60.0];

[request setHTTPMethod:@"POST"];
NSString *postString = @"company=Locassa&quality=AWESOME!";
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];

NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:request 
                                                             delegate:self];

只需将键/值对附加到post字符串

票数 195
EN

Stack Overflow用户

发布于 2012-12-31 15:23:38

在调用NSURLConnection之前,必须对NSMutableURLRequest进行所有更改。

当我复制并粘贴上面的代码并运行TCPMon时,我看到了这个问题,并且看到请求是GET而不是预期的POST

代码语言:javascript
复制
NSURL *aUrl = [NSURL URLWithString:@"http://www.apple.com/"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl
                                     cachePolicy:NSURLRequestUseProtocolCachePolicy
                                 timeoutInterval:60.0];


[request setHTTPMethod:@"POST"];
NSString *postString = @"company=Locassa&quality=AWESOME!";
[request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];

NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:request 
                                                         delegate:self];
票数 16
EN

Stack Overflow用户

发布于 2014-03-29 08:46:13

前面关于形成POST请求的文章在很大程度上是正确的(将参数添加到正文中,而不是URL中)。但是,如果输入数据有可能包含任何保留字符(例如空格、与号、加号),那么您将需要处理这些保留字符。也就是说,你应该对输入进行百分号转义。

代码语言:javascript
复制
//create body of the request

NSString *userid = ...
NSString *encodedUserid = [self percentEscapeString:userid];
NSString *postString    = [NSString stringWithFormat:@"userid=%@", encodedUserid];
NSData   *postBody      = [postString dataUsingEncoding:NSUTF8StringEncoding];

//initialize a request from url

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPBody:postBody];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

//initialize a connection from request, any way you want to, e.g.

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

其中,precentEscapeString方法的定义如下:

代码语言:javascript
复制
- (NSString *)percentEscapeString:(NSString *)string
{
    NSString *result = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                                 (CFStringRef)string,
                                                                                 (CFStringRef)@" ",
                                                                                 (CFStringRef)@":/?@!$&'()*+,;=",
                                                                                 kCFStringEncodingUTF8));
    return [result stringByReplacingOccurrencesOfString:@" " withString:@"+"];
}

请注意,有一个很有前途的NSString方法,stringByAddingPercentEscapesUsingEncoding (现在已被弃用),它可以做一些非常类似的事情,但要抵制住使用它的诱惑。它可以处理一些字符(如空格字符),但不能处理其他字符(如+&字符)。

当代的等价物是stringByAddingPercentEncodingWithAllowedCharacters,但是,同样,不要尝试使用URLQueryAllowedCharacterSet,因为它也允许+&传递不转义。这两个字符在更广泛的" query“中是允许的,但如果这两个字符出现在查询中的值中,则必须对它们进行转义。从技术上讲,您可以使用URLQueryAllowedCharacterSet构建一个可变字符集并删除其中包含的一些字符,也可以从头开始构建您自己的字符集。

例如,如果您查看Alamofire的parameter encoding,它们会获取URLQueryAllowedCharacterSet,然后删除generalDelimitersToEncode (其中包含字符#[]@,但由于某些旧web服务器中的历史错误,?/都不存在)和D22(即D23、D24、D25、D26、D27、D28、D29、D30、D31、D32和=)。这是正确的实现(尽管您可能会争论删除?/的问题),尽管相当复杂。也许CFURLCreateStringByAddingPercentEscapes更直接、更高效。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6148900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档