Преобразование команды CURL для Цели C - PullRequest
4 голосов
/ 24 января 2012

Мне трудно преобразовать эту команду curl для моего кода Objective C:

curl -u 0ef106c78146a23becba9105d1e:X -H "Accept: application/json" -H "Content-Type: application/json" https://boomboom.c27.imonggo.com/api/products.json

Вот мой целевой код C:

NSError *theError = NULL;
NSURL *theURL = [NSURL URLWithString:@"https://boomboom.c2.imonggo.com/api/products.json"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0f];
[theRequest setValue:@"0ef106c78146a23becba9105d1e" forHTTPHeaderField:@"username"];
[theRequest setValue:@"x" forHTTPHeaderField:@"password"];
[theRequest setValue:@"application/json" forHTTPHeaderField:@"Accept:"];
[theRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type:"];


NSURLResponse *theResponse = NULL;
NSData *theResponseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&theResponse error:&theError];

Скорее всего, моя проблема споля заголовка.

Ответы [ 3 ]

3 голосов
/ 24 января 2012

Прежде всего, вам не нужно двоеточие в имени поля заголовка HTTP.

Во-вторых, вы делаете HTTP-аутентификацию неправильно. Вам необходимо указать имя пользователя и пароль, username:password и Base64 кодировать данные объединенной строки. Используйте значение base64 в качестве значения для поля заголовка Authorization, используйте приведенный ниже код и добавьте кодировку Base 64 реализацию .

    // snip
    NSMutableUrlRequest* theRequest = [NSMutableUrlRequest ...]
    [MyClass httpAuthorizeRequest:theRequest withUsername:@"someuser" andPassword:@"mysecret"];
    // snip

+ (void)httpAuthorizeRequest:(NSMutableURLRequest*)request withUsername:(NSString*)username andPassword:(NSString*)password
{
    NSString* authorizationToken = [[NSString stringWithFormat:@"%@:%@", username, password] base64Representation];
    [request setValue:[NSString stringWithFormat:@"Basic %@", authorizationToken] forHTTPHeaderField:@"Authorization"];
}
0 голосов
/ 24 октября 2012

Я бы предложил использовать ASIHTTPRequest для преобразования cUrl в код Objective C. Поскольку я использовал его, и его очень легко реализовать, я использовал аутентификацию NSMutableUrlRequest, но у меня это не сработало. Поэтому я публикую это для кого-то, кто ищет ответ, как я.

ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:[NSURL URLWithString:@"https://acebonita.c2.imonggo.com/api/products.json"]];

[request setUsername:@"0efd245bfbf6bba4106c78146a23becba9105d1e"];
[request setPassword:@"x"];

[request addRequestHeader:@"Content-Type" value:@"application/json"];
[request addRequestHeader:@"Accept" value:@"application/json"];
[request startSynchronous]; 

if([request error])
{
    NSLog(@"Code : %d, Error: %@",[[request error] code],[[request error] description]);
}
NSLog(@"Code: %d, Description: %@, Message: %@",[request responseStatusCode],[request responseData],[request responseStatusMessage]); 
0 голосов
/ 24 января 2012

Вы можете просто собрать cURL для iOS. Вот Makefile для сборки iOS-библиотеки.

Сохраните этот файл в вашей домашней папке как «build-cURL.sh», затем откройте терминал и вставьте:

export CURL_VERSION=7.23.0 
sh ~/build-cURL.sh

Затем скрипт должен создать статическую библиотеку, которую вы можете добавить в свой проект. Затем вы захотите добавить файлы .h, и он будет готов к работе.

Я использовал lipo для создания толстого бинарного файла библиотеки, чтобы он работал как на симе, так и на устройстве, загрузите его с здесь . Затем добавьте папку curl в свой проект и добавьте библиотеку. Для этого нажмите на свой проект в левом верхнем углу, нажмите на свою цель, перейдите на вкладку «Фазы сборки», нажмите «Связать двоичные файлы с библиотеками», нажмите значок плюса и выберите файл .a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...