Запрос JSON POST на iPhone (с использованием HTTPS)

У меня размещена служба WCF, и я пытаюсь использовать ее в приложении для iPhone в качестве запроса JSON POST. . Я планирую использовать сериализатор JSON позже, но вот что у меня есть для запроса:

    NSString *jsonRequest = @"{\"username\":\"user\",\"password\":\"letmein\"}";
    NSLog(@"Request: %@", jsonRequest);

    NSURL *url = [NSURL URLWithString:@"https://mydomain.com/Method/"];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
    NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]];

    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
    [request setHTTPBody: requestData];

    [NSURLConnection connectionWithRequest:[request autorelease] delegate:self];

В моих полученных данных я просто печатаю их на консоли:

- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSMutableData *d = [[NSMutableData data] retain];
    [d appendData:data];

    NSString *a = [[NSString alloc] initWithData:d encoding:NSASCIIStringEncoding];

    NSLog(@"Data: %@", a);
}

И в этом ответе я получаю следующее сообщение:

Data: 


  
    Request Error
    
  
  
    

Request Error

The server encountered an error processing the request. Please see the service help page for constructing valid requests to the service.

Кто-нибудь знает, почему это происходит и где я ошибаюсь?

Я ' alt text

Единственная странная вещь, которую я заметил, - это сообщение «SSL-проксирование не включено для этого хоста: включите его в настройках прокси-сервера, расположение SSL». Кто-нибудь знает, что это означает? (Это также происходит в моем рабочем клиенте Windows).

Я только что запустил это на своем клиенте Windows, и единственное, что отличается, - это текст запроса и ответа, который зашифрован . Мне что-то не хватает, чтобы использовать для этого безопасное HTTP-соединение?

НОВОЕ РЕДАКТИРОВАНИЕ: Это работает с запросами без HTTPS, например: http://maps.googleapis.com/maps/api/geocode/json?address=UK&sensor=true . Итак, я полагаю, проблема заключается в том, чтобы заставить iPhone правильно отправлять POST через SSL?

Я также использую следующие методы:

- (void) connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    if([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust])
    {
        [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]
        forAuthenticationChallenge:challenge];
    }

    [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
}

- (void) connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace
{
    if([[protectionSpace authenticationMethod] isEqualToString:NSURLAuthenticationMethodServerTrust])
    {
        return YES;
    }
}

Это позволяет мне зайти так далеко. Если я их не использую, я получаю сообщение об ошибке:

Сертификат для этого сервера недействителен. Возможно, вы подключаетесь к серверу, который выдает себя за «mydomain.com», что может поставить под угрозу вашу конфиденциальную информацию.

11
задан ingh.am 3 November 2010 в 18:49
поделиться