2013-12-11 4 views
0

Я новичок в использовании HTTP, поскольку я традиционно был только разработчиком, но с моим текущим контрактом меня попросили использовать REST API для извлечения данных с сервера. Мне нужно аутентифицироваться в заголовке HTTP с помощью API-ключа и имени пользователя API, и меня просят сделать это в заголовке «токена» в соответствии с документацией API.Как настроить HTTP-заголовок для аутентификации?

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

Вот конкретная часть документации API Я ссылающийся:

REST-APIUser-Токен

APIKey и APIUserName, связанный с счетов должны быть установлены на « РЕСТ-APIUser - Знак»в Base64String Формат в заголовке маркера, как показано ниже: Convert.ToBas e64String (Encoding.UTF8.GetBytes (string.Format ("{0}: {1}", APIKey, APIUserName)))

Где

APIKey - уникальный ключ, связанный с учетной записью API

APIUserName - имя пользователя, связанное с учетной записью API

APP-User-ID

Идентификатор текущего пользователя должен быть установлен в положение «APP-User-ID "in Base64String Формат в заголовке. Convert.ToBase64String (Encoding.UTF8.GetBytes (AppUserID))

Где

AppUserID - Идентификатор пользователя, связанный с пользователем приложения API

Я во владении {APIKey}, {APIUserName} и {AppUserID}.

+1

Что говорят API, о которых вы говорили? –

+0

@KaiHuppmann См. Отредактированный вопрос. – amarkon

ответ

0

Начните с NSMutableURLRequest и используйте метод addValue:forHTTPHeaderField: или setAllHTTPHeaderFields:, чтобы добавить поля к названиям заголовков, указанным в документации.

3

См Add HTTP Header to NSURLRequest

/* Create request variable containing our immutable request 
* This could also be a paramter of your method */ 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.stackoverflow.com"]]; 

// Create a mutable copy of the immutable request and add more headers 
NSMutableURLRequest *mutableRequest = [request mutableCopy]; 
[mutableRequest addValue:@"__usersKey__" forHTTPHeaderField:@"token"]; 

// Now set our request variable with an (immutable) copy of the altered request 
request = [mutableRequest copy]; 

// Log the output to make sure our new headers are there  
NSLog(@"%@", request.allHTTPHeaderFields); 

Обратите внимание, что в случае, если вы имеете в виду HTTPS соединение является тот, который требует проверки подлинности, а не на запросы; хотя вы, похоже, не используете HTTPS.

NSString * AppUserId = Convert.ToBase64String (Encoding.UTF8.GetBytes (AppUserID)) // Или независимо от того, какая функция вам нужна, это не похоже на Objective-C.

Посмотрите на How to Base64 encoding on the iPhone или понравитесь для base64.Это сообщение предложить https://github.com/nicklockwood/Base64/

, если с помощью этой библиотеки, вам нужно что-то вроде функции

- (NSString *)base64EncodedString; 

И передать ему информацию, как это описано в документации по API. Мы не можем вам помочь, потому что у нас нет всей вашей информации.

Например, вы, вероятно, хотите:

NSString *token = [NSString [email protected]"%@:%@",APIKey,APIUserName] 
NSString *token64 = [token base64EncodedString]; //Assuming that's how you call the library's function. I have never used it so I don't know if it modifies NSString or what. You can always write a function for this part. 

[mutableRequest addValue:@"APIUser--Token" forHTTPHeaderField:token64]; //Not sure what the API says the value should be, formatting isn't clear 

//Follow the same lines for NSString *AppUserId 
[mutableRequest addValue:@"APP-User-ID" forHTTPHeaderField:AppUserId]; 

Просто следуйте API оттуда, чтобы сделать маркер таким же образом (создать маркер таким же образом).

+0

Можете ли вы проверить мой обновленный вопрос и убедиться, что ваш ответ по-прежнему соответствует спецификации API? Спасибо – amarkon

+0

Кажется, я думаю, что это так, не могли бы вы уточнить, где вы думаете, что это не так? Или у вас есть второй вопрос, который заключается в том, как создавать строки, которые будут переданы «forHTTPHeaderField:»? –

+0

Я не уверен в создании строк, которые будут переданы «forHTTPHeaderField:». – amarkon

Смежные вопросы