How to send multiple parameterts to PHP server in HTTP post

前端 未结 2 1485
抹茶落季
抹茶落季 2020-12-02 01:07

I\'m sending base64 string to php server and its working well. Now I want to send another parameter as a string. Can anyone tell me what code need to add in below code.

2条回答
  •  星月不相逢
    2020-12-02 01:56

    Given a NSDictionary "params" whose keys and values are strings and where every entry represents one parameter (name/value) you can define a helper category:

    @interface NSDictionary (FormURLEncoded)
    -(NSData*) dataFormURLEncoded;
    @end
    

    dataFormURLEncoded returns a properly encoded character sequence from the given parameters in the dictionary.

    The encoding algorithm is specified by w3c: URL-encoded form data / The application/x-www-form-urlencoded encoding algorithm

    It can be implemented as follows:

    First, a helper function which encodes a parameter name, respectively a parameter value:

    static NSString* x_www_form_urlencoded_HTML5(NSString* s)
    {
        // http://www.w3.org/html/wg/drafts/html/CR/forms.html#application/x-www-form-urlencoded-encoding-algorithm   , Editor's Draft 24 October 2013
        CFStringRef charactersToLeaveUnescaped = CFSTR(" ");
        CFStringRef legalURLCharactersToBeEscaped = CFSTR("!$&'()+,/:;=?@~");
        
        NSString *result = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
                                                 kCFAllocatorDefault,
                                                 (__bridge CFStringRef)s,
                                                 charactersToLeaveUnescaped,
                                                 legalURLCharactersToBeEscaped,
                                                 kCFStringEncodingUTF8));
        return [result stringByReplacingOccurrencesOfString:@" " withString:@"+"];
    }
    

    Finally, dataFormURLEncoded composes the character sequence of the encoded parameters. A "parameter" will be composed by concatenating the encoded name, = and encoded value:

    parameter := name "=" value
    

    Then, the parameter list will be composed by concatenating the parameters by separating them by a "&":

    parameters  := parameter ["&" parameter]
    

    It can be implemented as below:

    @implementation NSDictionary (FormURLEncoded)
    
    -(NSData*) dataFormURLEncoded {
        NSMutableData* data = [[NSMutableData alloc] init];
        BOOL first = YES;
        for (NSString* name in self) {
            @autoreleasepool {
                if (!first) {
                    [data appendBytes:"&" length:1];
                }
                NSString* value = self[name];
                NSData* encodedName = [x_www_form_urlencoded_HTML5(name) dataUsingEncoding:NSUTF8StringEncoding];
                NSData* encodedValue = [x_www_form_urlencoded_HTML5(value) dataUsingEncoding:NSUTF8StringEncoding];
                
                [data appendData:encodedName];
                [data appendBytes:"=" length:1];
                [data appendData:encodedValue];
                first = NO;
            }
        }
        return [data copy];
    }
    
    @end
    

    Note: The character sequence encodes the strings using Unicode UTF-8.

    Example:

    Given your parameters:

    NSDictionary* params = @{@"a": @"a a", @"b": @"b+b", @"c": @"ü ö"};
    NSData* encodedParamData = [params dataFormURLEncoded];
    

    Now, encodedParamData will be added to your body whose content type is application/x-www-form-urlencoded.

    The encoded parameter string becomes:

    a=a+a&b=b%2Bb&c=%C3%BC+%C3%B6

提交回复
热议问题