iOS — Не удается успешно отправить данные составной формы на сервер с помощью HTTP Post запроса

#ios #objective-c #http-post #nsurlconnection #nsurlrequest

#iOS #objective-c #http-post #nsurlconnection #nsurlrequest

Вопрос:

Я разрабатываю приложение для iPhone, в котором мне нужно передавать данные с мобильного устройства на сервер. Данные представлены в виде данных составной формы.

к сожалению, данные формы не попадают на сервер. Я перепробовал все способы. Но я не могу найти проблему в своем коде. Я очень уверен, что проблема на стороне клиента, поскольку я пытаюсь попасть в конечную точку API на сервере из приложения Android

Код приведен ниже

 NSString *str;
                str=[NSString stringWithFormat:@"https://www.mysite.com/ttk/rest/detail/updat‌​edetail"];

                NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];

                [request setURL:[NSURL URLWithString:str]];
                [request setHTTPMethod:@"POST"];

                NSMutableData *body = [NSMutableData data];

                NSString *boundary = @"---------------------------Boundary_1_511262261_1369143433608";

                NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
                [request addValue:contentType forHTTPHeaderField: @"Content-Type"];


                //  parameter imageData
                [body appendData:[[NSString stringWithFormat:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[@"Content-Disposition: form-data; name="profileimg"; filename="a.png"rn" dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[@"Content-Type: application/octet-streamrnrn" dataUsingEncoding:NSUTF8StringEncoding]];

                NSData *imageData=UIImagePNGRepresentation(pickedImage);

                [body appendData:[NSData dataWithData:imageData]];
                [body appendData:[@"rn" dataUsingEncoding:NSUTF8StringEncoding]];

                //  parameter mobilenumber
                [body appendData:[[NSString stringWithFormat:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="mobileNumber"rnrn"] dataUsingEncoding:NSUTF8StringEncoding]];

                [body appendData:[mobilenumber dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[@"rn" dataUsingEncoding:NSUTF8StringEncoding]];

                //  parameter countryCode
                [body appendData:[[NSString stringWithFormat:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="countryCode"rnrn"] dataUsingEncoding:NSUTF8StringEncoding]];

                [body appendData:[countrycode dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[@"rn" dataUsingEncoding:NSUTF8StringEncoding]];


                //  parameter displayName
                [body appendData:[[NSString stringWithFormat:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="displayName"rnrn"] dataUsingEncoding:NSUTF8StringEncoding]];

                [body appendData:[strusername dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[@"rn" dataUsingEncoding:NSUTF8StringEncoding]];


                //  parameter mobileID

                [body appendData:[[NSString stringWithFormat:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="mobileID"rnrn"] dataUsingEncoding:NSUTF8StringEncoding]];

                NSString *strsa3=[NSString stringWithFormat:@"%@",mobileID];
                [body appendData:[strsa3 dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[@"rn" dataUsingEncoding:NSUTF8StringEncoding]];

                //  parameter emailid

                [body appendData:[[NSString stringWithFormat:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="emailid"rnrn"] dataUsingEncoding:NSUTF8StringEncoding]];

                [body appendData:[stremail dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[@"rn" dataUsingEncoding:NSUTF8StringEncoding]];

                //  parameter Boolean

                [body appendData:[[NSString stringWithFormat:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="onlycontacts"rnrn"] dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[searchwithin dataUsingEncoding:NSUTF8StringEncoding]];


                [body appendData:[@"rn" dataUsingEncoding:NSUTF8StringEncoding]];


                //  parameter searchby
                [body appendData:[[NSString stringWithFormat:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="searchby"rnrn"] dataUsingEncoding:NSUTF8StringEncoding]];
                if(Radio1Check)
                {//Context
                    [body appendData:[@"Context" dataUsingEncoding:NSUTF8StringEncoding]];
                }
                else
                {
                    [body appendData:[@"Location" dataUsingEncoding:NSUTF8StringEncoding]];
                }

                [body appendData:[@"rn" dataUsingEncoding:NSUTF8StringEncoding]];

                //     parameter show location to other

                [body appendData:[[NSString stringWithFormat:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="showlocation"rnrn"] dataUsingEncoding:NSUTF8StringEncoding]];

                [body appendData:[location dataUsingEncoding:NSUTF8StringEncoding]];
                [body appendData:[@"rn" dataUsingEncoding:NSUTF8StringEncoding]];


                // close form
                [body appendData:[[NSString stringWithFormat:@"--%@--rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]];


                [request setHTTPBody:body];

                NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
                NSString *json=[[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
                NSLog(@"Resp string: %@",json);
  

Я установил границу закрытия и тестировал этот код много раз. Но проблема, похоже, скрывается где-то в коде, который я не могу найти.

Возвращаемые данные с сервера всегда равны нулю и не попадают на сервер.. Я дважды проверил URL, и URL также правильный. Пожалуйста, помогите мне в решении этой проблемы. Спасибо за ваше время

Комментарии:

1. Стандартное соглашение Cocoa заключается в передаче ошибки таким методам, как sendSynchronousRequest, а затем проверить ошибку, если возвращаемое значение равно нулю. Вот с чего я бы начал.

2. @BrandonRoth — Спасибо за быстрый ответ. Но конечная точка API не вызывается. Проблема заключается в клиентском коде. Есть идеи по этому поводу?

3. Вот почему я предлагаю начать с ошибки. Если по какой-либо причине возникает ошибка, вы должны получить сообщение об ошибке, возвращаемое через параметр error.

4. @BrandonRoth — Я пробовал это. Что я получаю при вводе NSLog, так это соответствующую строку: (null)

5. Код, который я использовал, — NSError *ошибка; NSData *returnData = [NSURLConnection отправляет синхронный запрос: запрос, возвращающий ответ: ноль ошибка: ноль]; NSString *json=[[NSString alloc] initWithData: кодировка возвращаемых данных: NSUTF8StringEncoding]; NSLog (@»Соответствующая строка: %@», ошибка);

Ответ №1:

Начните с передачи объекта ошибки и проверьте его, чтобы выяснить, что пошло не так, когда ваши возвращенные данные равны нулю. Это стандартное соглашение cocoa. Последние пару строк должны выглядеть примерно так

 NSError *error; 
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil     error:amp;error];
if (returnData)
{
        NSString *json=[[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
        NSLog(@"Resp string: %@",json);
}
else
{
    NSLog(@"Error: %@", error);
}
  

Комментарии:

1. Большое спасибо @Брэндон Рот. Я выяснил первопричину проблемы.

2. 2014-07-01 01:28:02.316 konnectlinks[796:60b] Ошибка: Ошибка домена = NSURLErrorDomain Code=-1000 «неверный URL» userInfo= 0x17eb7570 {NSUnderlyingError= 0x17ea8270 «неверный URL», NSLocalizedDescription=неверный URL} — Это ошибка. Любой, кто сталкивается с этой проблемой, я надеюсь, что это будет полезно