1010#import " RCTDataManager.h"
1111
1212#import " RCTAssert.h"
13+ #import " RCTConvert.h"
1314#import " RCTLog.h"
1415#import " RCTUtils.h"
1516
@@ -22,46 +23,46 @@ @implementation RCTDataManager
2223 * The responseSender block won't be called on same thread as called.
2324 */
2425RCT_EXPORT_METHOD (queryData:(NSString *)queryType
25- withQuery:(id )query
26+ withQuery:(NSDictionary * )query
2627 queryHash:(__unused NSString *)queryHash
2728 responseSender:(RCTResponseSenderBlock)responseSender)
2829{
2930 if ([queryType isEqualToString: @" http" ]) {
3031
31- // Parse query
32- NSDictionary *queryDict = query;
33- if ([query isKindOfClass: [NSString class ]]) {
34- // TODO: it would be more efficient just to send a dictionary
35- queryDict = RCTJSONParse (query, NULL );
36- }
37-
3832 // Build request
39- NSURL *url = [NSURL URLWithString: queryDict[@" url" ]];
40- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: url];
41- request.HTTPMethod = queryDict[@" method" ] ?: @" GET" ;
42- request.allHTTPHeaderFields = queryDict[@" headers" ];
43- if ([queryDict[@" data" ] isKindOfClass: [NSString class ]]) {
44- request.HTTPBody = [queryDict[@" data" ] dataUsingEncoding: NSUTF8StringEncoding];
45- }
33+ NSURL *URL = [RCTConvert NSURL: query[@" url" ]];
34+ NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: URL ];
35+ request.HTTPMethod = [RCTConvert NSString: query[@" method" ]] ?: @" GET" ;
36+ request.allHTTPHeaderFields = [RCTConvert NSDictionary: query[@" headers" ]];
37+ request.HTTPBody = [RCTConvert NSData: query[@" data" ]];
4638
4739 // Build data task
4840 NSURLSessionDataTask *task = [[NSURLSession sharedSession ] dataTaskWithRequest: request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *connectionError) {
4941
5042 // Build response
5143 NSDictionary *responseJSON;
5244 if (connectionError == nil ) {
53- NSStringEncoding encoding;
45+ NSStringEncoding encoding = NSUTF8StringEncoding ;
5446 if (response.textEncodingName ) {
5547 CFStringEncoding cfEncoding = CFStringConvertIANACharSetNameToEncoding ((CFStringRef)response.textEncodingName );
5648 encoding = CFStringConvertEncodingToNSStringEncoding (cfEncoding);
57- } else {
58- encoding = NSUTF8StringEncoding;
5949 }
60- int responseCode = (int )[((NSHTTPURLResponse *)response) statusCode ];
61- NSString *returnData = [[NSString alloc ] initWithData: data encoding: encoding];
62- responseJSON = @{@" status" : @(responseCode), @" responseText" : returnData};
50+ NSHTTPURLResponse *httpResponse = nil ;
51+ if ([response isKindOfClass: [NSHTTPURLResponse class ]]) {
52+ // Might be a local file request
53+ httpResponse = (NSHTTPURLResponse *)response;
54+ }
55+ responseJSON = @{
56+ @" status" : @([httpResponse statusCode ] ?: 200 ),
57+ @" responseHeaders" : [httpResponse allHeaderFields ] ?: @{},
58+ @" responseText" : [[NSString alloc ] initWithData: data encoding: encoding] ?: @" "
59+ };
6360 } else {
64- responseJSON = @{@" status" : @0 , @" responseText" : [connectionError localizedDescription ]};
61+ responseJSON = @{
62+ @" status" : @0 ,
63+ @" responseHeaders" : @{},
64+ @" responseText" : [connectionError localizedDescription ]
65+ };
6566 }
6667
6768 // Send response (won't be sent on same thread as caller)
0 commit comments