How to POST question mark to a web service? Objective-c

淺唱寂寞╮ 提交于 2019-12-11 14:25:57

问题


Previously, I was having a problem in posting special characters to web service. But now, I can POST all special characters except "?" which I do not understand why.

NSString+URLEndoding.h

@interface NSString (NSString_URLEncoding) //originally NSOBject
- (NSString *)urlEncodeUsingEncoding:(CFStringEncoding)encoding;
- (NSString *)urlEncode;
@end

NSString+URLEndoding.m

@implementation NSString (NSString_URLEncoding)

- (NSString *)urlEncodeUsingEncoding:(CFStringEncoding)encoding {
return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                 (__bridge CFStringRef)self,
                                                                 NULL,
                                                                 CFSTR("!*'();:@&=+$,/?%#[]"),
                                                                 encoding));
}

- (NSString *)urlEncode {
    return [self urlEncodeUsingEncoding:kCFStringEncodingUTF8];
}

@end

Below are some part of UpdateSomething.m:

    NSString *encodeSomething = [something urlEncode];
    NSMutableString *post = [NSMutableString stringWithFormat:@"something=%@", encodeSomething];
    //NSLog(@"post: %@", post);
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding];
    //NSLog(@"PostData: %@", postData);
    NSString *check = [[NSString alloc] initWithData:postData encoding:NSASCIIStringEncoding]; //UTF8 also works.
    NSLog(@"check string = %@", check);
    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:strURLQueryString]];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody:postData];
    NSURLResponse *response;
    NSError *err=nil;
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
}

The output of check is:

check string = something%20%3F

I know that "%3F" = "?". But I do not understand why I get error whenever I key in question mark.

Response: Input Array does not match ?

Your assistance(s) are appreciated.


回答1:


I tried to do this again some time after I posted this question.

Previously, I used a web service that was written by someone else. I suspect it has something to do with some custom escaping character function.

This time, I wrote my own web service, and it works perfectly. I don't even need to use the "NSString_URLEncoding"



来源:https://stackoverflow.com/questions/18306224/how-to-post-question-mark-to-a-web-service-objective-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!