如何从dataTaskWithRequest打印Web服务请求和响应

时间:2018-02-26 05:27:17

标签: ios json swift nsurlsessiondatatask

任何人都可以指导我如何使用swift 4.0和目标C以json格式打印来自dataTaskWithRequest的Web服务请求和响应。

尝试了链接:

How to print NSMutableURLRequest?

我可以打印它们,但它不能以适当的格式打印。我需要一种格式,以便我可以将其粘贴在邮递员或网络浏览器中并进行测试。

我需要的请求格式:

例如:https://restcountries.eu/rest/v2/name/aruba?fullText=true

对于回复:

需要响应格式,例如上面的网址响应,我可以在http://jsonviewer.stack.hu中查看它们。

3 个答案:

答案 0 :(得分:2)

获取字符串和字典对象中的响应对象:

NSURLSessionDataTask *task = [session dataTaskWithRequest:URLRequest
                                                completionHandler:
                                      ^(NSData *data, NSURLResponse *response, NSError *error) 
{ 
    // your code 

    NSString *responseString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

    id responseObjects = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
}

从NSData对象或字典中获取漂亮的json格式:

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:yourDictionary
                                                   options:NSJSONWritingPrettyPrinted
                                                     error:&error];

NSString *strData = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"Params : %@", strData);

修改

要打印json请求,请尝试使用:

// for POST/JSON type

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

// for GET type

NSLog(@"Request url : %@", [[request.URL absoluteString] stringByRemovingPercentEncoding]);

答案 1 :(得分:0)

您可以打印JSON数据,例如

if error == nil {
    do {
        let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments)
        print(json)
        let dic = json as! NSDictionary
        print(dic)
    }
    catch {
        print("Throw error when convert to json")
    }
}

答案 2 :(得分:0)

以JSON格式打印响应,以便您可以将其复制/粘贴到Postman中并进行检查。

在目标C

let v = 32;
let _ = v.clone();
let _ = Clone::clone(&v);
let _ = <i32 as Clone>::clone(&v);

在Swift 4中

NSString* jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"jsonString: %@", jsonString);