Frage

Ich sende Base64 -String an PHP Server und seine gute Funktionsweise. Jetzt möchte ich einen anderen Parameter als Zeichenfolge senden. Kann mir jemand sagen, welcher Code den folgenden Code hinzufügen muss?

Der folgende Code funktioniert gut für den einzelnen Parameter. Wie können wir es für mehrere Parameter ändern?

 NSData *data = [UIImageJPEGRepresentation(imgeview.image,90) base64Encoding];

// Create your request string with parameter name as defined in PHP file
NSString *myRequestString = [NSString stringWithFormat:@"question_image=%@",data];
myRequestString = [myRequestString stringByReplacingOccurrencesOfString:
                                             @"+" withString:@"%2B"];

// Create Data from request
NSData *myRequestData = [NSData dataWithBytes:[myRequestString UTF8String] 
                                       length:[myRequestString length]];
request = [[NSMutableURLRequest alloc] initWithURL:
    [NSURL URLWithString:@"http://192.168.0.101/Mobile_tutor/webservice/question_details.php"]];
// set Request Type
[request setHTTPMethod:@"POST"];
// Set content-type
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
// Set Request Body
[request setHTTPBody:myRequestData];
// Now send a request and get Response
NSData *returnData = [NSURLConnection sendSynchronousRequest:request 
                                           returningResponse:nil 
                                                       error: nil];
// Log Response
NSString *response = [[NSString alloc] initWithBytes:[returnData bytes] 
                                              length:[returnData length]
                                            encoding:NSUTF8StringEncoding];
NSLog(@"-------------%@",response); // here you get reasponse string
War es hilfreich?

Lösung

Für den Netzwerkbetrieb ist diese besser unterstützende API wie AFNetworking verfügbare Hexenarbeit Async und viel besser zu handhaben

Tutorials für AFNetworking

Holen Sie sich von hier

NSArray *keys = @[@"UserID", ];
NSArray *objects = @[@(userId)];

NSDictionary *parameter = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:
                            [NSURL URLWithString:BaseURLString]];
[httpClient setParameterEncoding:AFJSONParameterEncoding];
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];

NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST"
                                                        path:@"services/UserService.svc/GetUserInfo"
                                                  parameters:parameter];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

    NSError* error = nil;
    id jsonObject = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:&error];
    if ([jsonObject isKindOfClass:[NSDictionary class]]) {
        // do what ever
    }
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

}];

Andere Tipps

Angenommen NSDictionary "Parameter", deren Schlüssel und Werte Strings sind und wo jeder Eintrag repräsentiert eines Parameter (Name/Wert) Sie können eine Helferkategorie definieren:

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

dataFormURLEncoded Gibt eine ordnungsgemäß codierte Zeichensequenz aus den angegebenen Parametern im Wörterbuch zurück.

Der Codierungsalgorithmus wird durch W3C angegeben: URL-codierte Formulardaten / die Anwendung / x-www-form-remodierte Codierungsalgorithmus

Es kann wie folgt implementiert werden:

Erstens eine Helferfunktion, die einen Parameternamen codiert, jeweils einen Parameterwert:

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:@"+"];
}

Endlich, dataFormURLEncoded Komponiert die Zeichensequenz der codierten Parameter. Ein "Parameter" wird durch Verkettung des Codierten komponiert name, = und codiert value:

parameter := name "=" value

Anschließend wird die Parameterliste durch die Verkettung der Parameter durch eine Trennung durch ein "&" komponiert:

parameters  := parameter ["&" parameter]

Es kann wie unten implementiert werden:

@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

Notiz: Die Zeichensequenz codiert die Zeichenfolgen mit Unicode UTF-8.

Beispiel:

Angesichts Ihrer Parameter:

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

Jetzt, encodedParamData wird Ihrem Körper hinzugefügt, dessen Inhaltstyp ist application/x-www-form-urlencoded.

Die codierte Parameterzeichenfolge wird:

A = A+A & B = B%2BB & C =%C3%BC+%C3%B6

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top