2012-02-01 2 views
-2

Код Java должен написать эквивалент в объективе C.Кодирование и сообщение для связи -ios,

пожалуйста, вы можете помочь мне:

JavaCode URL URL;

HttpURLConnection urlConn; 
      DataOutputStream printout; 
      BufferedReader input; 
      url = new URL(IDP_URL); 
      urlConn = (HttpURLConnection) url.openConnection(); 
      urlConn.setDoOutput(true); 
      urlConn.setDoInput(true); 
      urlConn.setRequestProperty("accept", "application/json"); 
      urlConn.setRequestMethod("POST"); 
      // Specify the content type. 
      urlConn.setRequestProperty("Content-Type", "text/plain"); 
      // Send POST output. 
      printout = new DataOutputStream(urlConn.getOutputStream()); 
      String content = "username=" 
        + URLEncoder.encode(username, UTF_8_TYPE) 
        + "&password=" 
        + URLEncoder.encode(password, UTF_8_TYPE) 
        + "&client_assertion_type=" 
        + URLEncoder.encode(tokenType, UTF_8_TYPE) 
        + "&client_assertion=" 
        + URLEncoder.encode(appToken, UTF_8_TYPE) 
        + "&spEntityID=" 
        + URLEncoder.encode("http://localhost:8080/opensso", 
          UTF_8_TYPE); 
      printout.writeBytes(content); 
      printout.flush(); 
      printout.close(); 
      // Get response data. 
      input = new BufferedReader(new InputStreamReader(urlConn 
        .getInputStream())); 
      do { 
       str = input.readLine(); 
      } while (str == null); 
      input.close(); 
     } catch (IOException e) { 
      LOGGER.error("Exception: ", e); 
     } 

Эквивалентные ИОС код:

- (NSString *)urlEncodeValue:(NSString *)str 
{ 

    //   NSString *result = (NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR(":/?#[]@!$&()*+,;="), kCFStringEncodingUTF8); 
    //   return [result autorelease]; 
    return [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
} 

-(void) IdpServiceCall { 


    NSString* strRequest = [NSString stringWithFormat:@"username=%@&password=%@&client_assertion_type=%@&client_assertion=%@&spEntityID=%@", 
    [self urlEncodeValue:strUsrName],[self urlEncodeValue:strPasswrd],[self urlEncodeValue:@"JWT"],[self urlEncodeValue:strAppTknContent],[self urlEncodeValue:@"http://localhost:8080/opensso"]]; 
    NSHTTPURLResponse *response = nil; 
    NSError *error = nil;  
    NSURL *nsurl = [[NSURL alloc] initWithString:@"http://10.230.148.253:8080/IDP/services/login/authuser"]; 
    NSMutableURLRequest* urlRequest = [[NSMutableURLRequest alloc] initWithURL:nsurl]; 
     NSData* dataRequest = [NSData dataWithBytes:[strRequest UTF8String] length:[strRequest length]];//this line is for making the nsstring to utf8string and not encoding 
     [urlRequest setHTTPMethod: @"POST"]; 
     [urlRequest setHTTPBody: dataRequest]; 
    NSString *contentType = [NSString stringWithFormat:@"text/plain"]; 
    [urlRequest setValue:contentType forHTTPHeaderField:@"Content-Type"]; 
    [urlRequest setTimeoutInterval:3.0]; 
    [urlRequest setCachePolicy:NSUrl];  

    NSData *responseData =[NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error]; 

NSString *result =[[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding]; 
     NSLog(@"downloaded idp output %@",result);  
} 

им не получить желаемый результат это 0 байт.

Пожалуйста, укажите мне вопрос. Будем рады.

+1

Что вы пробовали себя - Breakpoints и шаговый через код, чтобы исследовать значения хранится в переменных и возвращаемых значениях из вызовов функций, за которыми следует проверка документации для методов, призванных убедиться, что они верны? Или вы просто обнаружили, что он не работает и разместил его здесь? –

+0

Я выполнил все шаги отладки, шаг за шагом, получая 0 байт после отправки синхронной загрузки. – Pinky

+0

Используйте асинхронное NSURLConnection и поместите точку останова в метод didReceiveData, метод didReceiveResponse и метод didFailWithError для печати. Проверьте это: https://gist.github.com/1716675 – 0x8badf00d

ответ

2

Ваш код выглядит отлично, только NSData для тела HTTP выглядит странно.
Попробуйте построить ваши данные больше, как это:

appToken = [prefs objectForKey:@"Applicasa appToken"]; 
    [data appendData:[[NSString stringWithFormat:@"%@=%@",@"Key",@"Value"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [_request setHTTPBody:data]; 



Позвольте мне знать, если вы это работало для вас

+0

спасибо за проблему с ответом. Wit encoding раскомментирует эту часть кода, работающую fyn NSString * result = (NSString *) CFURLCreateStringByAddingPercentEscapes (kCFAllocatorDefault, (CFStringRef) str, NULL, CFSTR (": /? # [] @! $ &()*+,; ="), kCFStringEncodingUTF8); – Pinky

+0

Я знаю, что вам это удалось.
В любом случае, если вы имеете дело с преобразованием NSString, не слишком сложно работать, следующая ссылка может быть полезна
https://github.com/mwaterfall/MWFeedParser/blob/master/Classes/NSString+HTML.m –

+0

hey thnx alot sorry fr поздний ответ – Pinky

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