Цель C HTML-запрос - PullRequest
       6

Цель C HTML-запрос

0 голосов
/ 29 марта 2012

Я только начинаю в XCode и хотел попробовать создать простое приложение, в котором вы нажимаете кнопку, и оно создает запрос на публикацию html и возвращает html в виде строки, с которой я не могу потом возиться. Я понимаю, что лучше использовать сервер, используя путь, мыло или XML, но для меня это первый шаг.

У меня проблема в том, что я не могу понять, почему я получаю нулевые данные, возвращенные после моего запроса. Я думаю, что это может быть связано со мной, пытаясь преобразовать переменную NSData в строку?

ниже - код для нажатия кнопки, а ниже - NSLog Подробности того, что выходит.

Может ли кто-нибудь подсказать, что я делаю с этим не так?

Ура, John

- (IBAction) buttonTouchedSignIn {

NSString *userName = @"mymadeupuser";
NSLog (@"NSString userName = %@\n\n", userName);
NSString *password = @"1234";
NSLog (@"NSString password = %@\n\n", password);

NSString *url = @"http%3A%2F%2Fmyotherwebsite.com%3A80%2Fsomthing%2Fweb%2Faction%2Flogin.do%3FtargetURL%3Dhttp%3A%2F%2Fsomwherelse.com%2Fsite3%2Fweb3%2Faction%2FmyAccountMenu.do%3Fdscnt%3D0%26vid%3DBSU";
NSLog (@"NSString url = %@\n\n", url);

// Create the username and password string.
// username and password are the username and password to login with
NSString *postString = [[NSString alloc] initWithFormat:@"bor_id=%@&bor_verification=%@&url=%@",userName, password, url];
NSLog (@"NSString postString = %@\n\n", postString);    

// Create the URL request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:@"https://mywebsite.com/somthing/"]];  
NSLog (@"NSString NSMutableURLRequest = %@\n\n", request);

NSData *requestData = [postString dataUsingEncoding:NSASCIIStringEncoding];
[request setHTTPBody: requestData];  // apply the post data to be sent   
NSLog (@"NSData requestData = %@\n\n", requestData);    

// Call the URL
NSURLResponse *response;  // holds the response from the server
NSLog (@"NSURLResponse response = %@\n\n", response);


NSError *error;   // holds any errors
NSLog (@"NSError error = %@\n\n", error);     

NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse:&response error:&error];  // call the URL
NSLog (@"NSData returnedData = %@\n\n", returnData); 


//If the response from the server is a web page, dataReturned will hold the string of the HTML returned.
NSString *dataReturned = [[NSString alloc] initWithData:returnData encoding:NSASCIIStringEncoding];
NSLog(@"returned htmlASCII is:  %@\n\n", dataReturned);   

NSString *dataReturned2 = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"returned htmlUTF8 is:  %@\n\n", dataReturned2); 

}

Вот вывод NSLog для всех переменных 2012-03-29 12: 10: 04.306 MyApp [2635: f803] NSString userName = mymadeupusername

Текущий язык: авто; в настоящее время цель-с 2012-03-29 12: 10: 16.520 MyApp [2635: f803] Пароль NSString = 1234

2012-03-29 12: 10: 16.520 MyApp [2635: f803] NSString url = http% 3A% 2F% 2Fsomewebpage.com% 3A80% 2Fweb2% 2Fweb3% 2Faction% 2Fsigin.go% 3FargetturL% 3Dhttp% 3A% 2F% 2Fsomewebpage.com% 2Fweb2% 2Fweb3% 2Faction% 2Fyouraccounts.go% 3Fdscnt% 3D0% 26vid% 3DBSU

2012-03-29 12: 10: 16.521 MyApp [2635: f803] NSString postString = bor_id = joeliot & bor_verification = 1234 & url = http% 3A% 2F% 2Fsomewebpage.com% 3A80% 2Fweb2% 2Fweb3% 2Factiongo 2Fsigin. 3FtargetURL% 3Dhttp% 3A% 2F% 2Fsomewebpage.com% 2Fweb2% 2Fweb3% 2Faction% 2Fyouraccounts.go% 3Fdscnt% 3D0% 26vid% 3DBSU

2012-03-29 12: 10: 16.522 MyApp [2635: f803] NSString NSMutableURLRequest = https://somewebpage.com/pds?func=login&calling_system=blah&term1=short&company=BSU>

2012-03-29 12: 10: 16.522 MyApp [2635: f803] NSData requestData =

2012-03-29 12: 10: 16,650 MyApp [2635: f803] NSURLResponse response = (null)

2012-03-29 12: 10: 16,651 MyApp [2635: f803] Ошибка NSError = (ноль)

2012-03-29 12: 10: 17.422 MyApp [2635: f803] NSData returnData = (null)

2012-03-29 12: 10: 17.422 MyApp [2635: f803] вернул htmlASCII:

2012-03-29 12: 10: 17.422 MyApp [2635: f803] вернул htmlUTF8:

1 Ответ

1 голос
/ 29 марта 2012

Несколько вещей, которые я вижу:

1) Вам необходимо установить метод POST. Используйте setHTTPMethod по вашему запросу.

2) Вам нужна длина контента. Сделайте что-то вроде: [request setValue: length forHTTPHeaderField: @ "Content-Length"]; где длина - это строковое представление количества байтов, которые вы публикуете.

3) Вероятно, вам нужно установить в качестве хоста имя сервера. Это зависит немного от сервера, но они склонны отклонять вещи не для их имени хоста (ов). Используйте setValue снова.

4) Вероятно, у вас должен быть тип контента. Опять же, зависит от сервера, но, безусловно, это хорошая практика.

5) Кодировка строк UTF8 лучше, чем ascii, большинство веб-приложений лучше с ней справляются.

Я надеюсь, что хотя бы один из них поможет. Удачи.

...