#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/updatedetail"];
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} — Это ошибка. Любой, кто сталкивается с этой проблемой, я надеюсь, что это будет полезно