1

嗨,我正在尝试将从网页发送的网络请求复制到 iOS 上的应用程序作为练习。问题是,当网页发送包含文本 lang=C++ 的 POST 时,它会将文本编码为 lang=C%2B%2B 此外,发送的数据似乎已损坏,我是否缺少某种编码?NSMutableString我使用带有 setBody 编码消息的数据发送请求: NSUTF8StringEncoding,请参见下面的代码:

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    ...(URL and so on)...
    NSString *contentType = [NSString stringWithFormat:@"application/x-www-form-urlencoded"];
    [request addValue:contentType forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:[data  dataUsingEncoding:NSUTF8StringEncoding]];
    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

有关应用程序与 Web 服务发送的请求的不同样式的更多信息,请参阅来自 wireshark 的这些屏幕截图,底部图像中突出显示的文本是我想要发送的内容。上图显示了应用程序实际发送的内容,就像现在一样。

我似乎在发布什么

应该发布什么

4

2 回答 2

1

上面的答案对我不起作用,我不得不NSString根据这个创建一个扩展接口的类别。data并在上面字符串的某些部分使用编码。

这是我使用的类别的方法:

#import "NSString+URLEncoding.h"
@implementation NSString (URLEncoding)
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
    return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
                                                               (CFStringRef)self,
                                                               NULL,
                                                               (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
                                                               CFStringConvertNSStringEncodingToEncoding(encoding));
}
于 2013-06-01T08:06:12.187 回答
1

我认为您需要使用 NSString 的stringByAddingPercentEscapesUsingEncoding方法来对 URL 进行编码,而相反的方法是使用stringByReplacingPercentEscapesUsingEncoding

这种编码应该在字符串被序列化之前NSData完成

于 2013-05-31T21:10:28.470 回答