문제

Base64 문자열을 PHP 서버로 보내고 잘 작동합니다. 이제 다른 매개 변수를 문자열로 보내고 싶습니다. 아래 코드에 어떤 코드를 추가 해야하는지 말해 줄 수 있습니까?

아래 코드는 단일 매개 변수에 적합합니다. 여러 매개 변수에 대해 어떻게 수정할 수 있습니까?

 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
도움이 되었습니까?

해결책

네트워크 작업을 위해 Afnetworking 사용 가능한 마녀 작업 비동기와 같은 API를 더 잘 지원하고 처리하는 방법이 더 좋습니다.

Afnetworking을위한 튜토리얼

여기서 도착하십시오

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) {

}];

다른 팁

주어진 a NSDictionary 열쇠와 값이 문자열이고 모든 항목이 나타내는 "Params" 하나 매개 변수 (이름/값) 도우미 카테고리를 정의 할 수 있습니다.

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

dataFormURLEncoded 사전의 주어진 매개 변수에서 올바르게 인코딩 된 문자 시퀀스를 반환합니다.

인코딩 알고리즘은 W3C에 의해 지정됩니다. URL에 인코딩 된 양식 데이터 / Application / X-www-Form-urlencoded 인코딩 알고리즘

다음과 같이 구현할 수 있습니다.

먼저, 매개 변수 이름을 각각 인코딩하는 헬퍼 함수, 매개 변수 값 :

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

드디어, dataFormURLEncoded 인코딩 된 매개 변수의 문자 시퀀스를 구성합니다. "매개 변수"는 인코딩 된 것을 연결하여 구성됩니다. name, = 인코딩 value:

parameter := name "=" value

그런 다음 매개 변수 목록은 매개 변수를 "&"로 분리하여 매개 변수를 연결하여 구성됩니다.

parameters  := parameter ["&" parameter]

다음과 같이 구현할 수 있습니다.

@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

메모: 문자 시퀀스는 유니 코드 UTF-8을 사용하여 문자열을 인코딩합니다.

예시:

매개 변수가 주어지면 :

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

지금, encodedParamData 콘텐츠 유형이있는 신체에 추가됩니다. application/x-www-form-urlencoded.

인코딩 된 매개 변수 문자열은 다음과 같습니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top