Добавить пары ключ / значение в NSMutableURLRequest - PullRequest
2 голосов
/ 05 февраля 2012

Хотя есть много связанных вопросов, я не вижу вопроса, который касается добавления нескольких пар ключ / значение в NSURLRequest.

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

Вот что у меня есть. Заранее спасибо.

NSURL *authenticateURL = [[NSURL alloc] initWithString:@"https://www.the website.com/authenticate"];
NSMutableURLRequest *authenticateRequest = [[NSMutableURLRequest alloc] initWithURL:authenticateURL];
[authenticateRequest setHTTPMethod:@"POST"];
NSString *myRequestString = @"username=";
[myRequestString stringByAppendingString:username];
[myRequestString stringByAppendingString:@"&"];
[myRequestString stringByAppendingString:@"password="];
[myRequestString stringByAppendingString:password];
NSData *requestData = [NSData dataWithBytes:[myRequestString UTF8String] length:[myRequestString length]];
[authenticateRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
[authenticateRequest setHTTPBody: requestData];
[authenticateRequest setTimeoutInterval:30.0];

connection = [[NSURLConnection alloc] initWithRequest:authenticateRequest delegate:self]; 

Ответы [ 2 ]

5 голосов
/ 05 февраля 2012

Вы не используете NSString правильно (ваш myRequestString фактически будет читать "username ="). Вместо этого попробуйте это:

NSMutableString *myRequestString = [NSMutableString stringWithString:@"username="];
[myRequestString appendString:username];
[myRequestString appendString:@"&password="];
[myRequestString appendString:password];

В дополнение к этому замечательному ответу, просто типичный пример кода:

-(NSString *)buildKeyValuePostString
    {
    NSString *username = @"boss@apple.com";
    NSString *password = @"macintosh";

    NSMutableString *r = [NSMutableString stringWithString:@""];

    [r appendString:@"command=listFileNames"];
    [r appendString:@"&"];

    [r appendString:@"name=blah"];
    [r appendString:@"&"];

    [r appendString:@"user="];
    [r appendString: [username stringByUrlEncoding] ];
    [r appendString:@"&"];

    [r appendString:@"password="];
    [r appendString: [password stringByUrlEncoding] ];

    return r;
    }

и вот категория для выполнения сложной / раздражающей работы по кодированию URL

-(NSString *)stringByUrlEncoding
    {
    return (NSString *)CFBridgingRelease(
             CFURLCreateStringByAddingPercentEscapes(
                NULL,
                (CFStringRef)self,
                NULL,
                (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                kCFStringEncodingUTF8)
                );

    // with thanks to http://www.cocoanetics.com/2009/08/url-encoding/
    // modified for ARC use 2014
    }

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 05 февраля 2012

Предполагая, что вы хотите добавить в запрос поля заголовка HTTP, используйте:

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