2012-11-14 263 views
12

我想問是否有人嘗試打印出NSMutableURLRequest *請求的值;打印NSMutableURLRequest內容

這裏是我的場景,我已經形成了我的XML,並嘗試使用Firefox海報插件發送它,我成功地玩有效和無效的內容,所以它的時間進入iOS,不幸的是與iOS似乎並不工作正確地tho我總是得到一個錯誤的請求(400),我懷疑是由一個畸形的xml內容造成的響應;所以我在發送請求之前想要檢查它是否處於正確的形式。

所以把它歸結爲 「我怎樣才能打印出來(的NSLog,等等)的*請求的內容」 下面

示例代碼:

NSURL *URL = [NSURL URLWithString:@"http://xxx.xxx.xxx.xxx/ps"]; 

    NSMutableURLRequest *request = [NSMutableURLRequest           requestWithURL:URL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60]; 
    NSString *msgLength = [NSString stringWithFormat:@"%d", [self.xmlLogin length]]; 

    //NSString *params = [[NSString alloc] initWithFormat:@"%@",[self xmlLogin]]; 
    [request addValue:@"application/xxx.ven.xml" forHTTPHeaderField:@"Content-Type"]; 
    [request addValue:msgLength forHTTPHeaderField:@"Content-Length"]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:@"identity" forHTTPHeaderField:@"Accept-Encoding"]; 
    [request setValue:@"windows-1251" forHTTPHeaderField:@"Accept-Charset"]; 
    [request setCachePolicy:NSURLRequestReturnCacheDataElseLoad]; 
    [request setHTTPBody:[[self xmlLogin] dataUsingEncoding:NSUTF8StringEncoding]]; 

此代碼段

NSLog(@"Request %@\n",request); 

結果

<NSMutableURLRequest http://xxx.xxx.xxx.xxx/ps> 

而做類似

NSLog(@"Request %@\n",[request HTTPBody]); 

結果

<4c697665 3e383634 30303c2f 54696d65 546f4c69 76653e20 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 203c5365 7373696f 6e436f6f 6b69653e 436f6c69 62726961 494d5053 5f333734 36323032 39322e34 38373931 345f3737 33313c2f 53657373 696f6e43 6f6f6b69 653e2020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 3c2f4c6f 67696e2d 52657175 6573743e 3c2f5472 616e7361 6374696f 6e436f6e 74656e74 3e3c2f54 72616e73 61637469 6f6e3e20 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020 203c2f53 65737369 6f6e3e3c 2f57562d 4353502d 4d657373 6167653e> 

我知道的十六進制值的這個集合可以轉換;怎麼樣? (tho發現如何只是一個願望清單)

真正的問題歸結爲請求的內容,我急於找出如何查看原始內容,並檢查它是否真正在其正確的形式。

謝謝,

+6

可以使用'的NSLog(@ 「請求身體%@」,[[的NSString的alloc] initWithData:請求HTTPBody]編碼:NSUTF8StringEncoding];' – Moxy

回答

24
NSLog(@"Request body %@", [[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding]); 
+0

但是,如果我想要請求與參數在一個字符串,即最終的URL, like ..「http://192.168.100.50:8022/LoginService.svc/GetloginDetailObj/"ALL TH E PARAMETERS」 我怎麼能在nslog ...? – g212gs

+2

上述技巧僅適用於PUT/POST請求,GET請求具有URI中的參數 –

+2

這怎麼可以用sw IFT? –

6
- (NSString *)formatURLRequest:(NSURLRequest *)request 
    { 
     NSMutableString *message = [NSMutableString stringWithString:@"---REQUEST------------------\n"]; 
     [message appendFormat:@"URL: %@\n",[request.URL description] ]; 
     [message appendFormat:@"METHOD: %@\n",[request HTTPMethod]]; 
     for (NSString *header in [request allHTTPHeaderFields]) 
     { 
      [message appendFormat:@"%@: %@\n",header,[request valueForHTTPHeaderField:header]]; 
     } 
     [message appendFormat:@"BODY: %@\n",[[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding]]; 
     [message appendString:@"----------------------------\n"]; 
     return [NSString stringWithFormat:@"%@",message]; 
    } 
- (NSString *)formatURLResponse:(NSHTTPURLResponse *)response withData:(NSData *)data 
    { 
     NSString *responsestr = [[NSString alloc] initWithBytes:[data bytes] length:[data length] encoding:NSUTF8StringEncoding]; 
     NSMutableString *message = [NSMutableString stringWithString:@"---RESPONSE------------------\n"]; 
     [message appendFormat:@"URL: %@\n",[response.URL description] ]; 
     [message appendFormat:@"MIMEType: %@\n",response.MIMEType]; 
     [message appendFormat:@"Status Code: %ld\n",(long)response.statusCode]; 
     for (NSString *header in [[response allHeaderFields] allKeys]) 
     { 
      [message appendFormat:@"%@: %@\n",header,[response allHeaderFields][header]]; 
     } 
     [message appendFormat:@"Response Data: %@\n",responsestr]; 
     [message appendString:@"----------------------------\n"]; 
     return [NSString stringWithFormat:@"%@",message]; 
    }