123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- //
- // NSURLRequest+QNRequest.m
- // AppTest
- //
- // Created by yangsen on 2020/4/8.
- // Copyright © 2020 com.qiniu. All rights reserved.
- //
- #import <objc/runtime.h>
- #import "NSURLRequest+QNRequest.h"
- @implementation NSURLRequest(QNRequest)
- #define kQNURLReuestHostKey @"Host"
- #define kQNURLReuestIdentifierKey @"QNURLReuestIdentifier"
- - (BOOL)qn_isQiNiuRequest{
- if (self.qn_identifier && self.qn_domain) {
- return YES;
- } else {
- return NO;
- }
- }
- - (NSString *)qn_identifier{
- return self.allHTTPHeaderFields[kQNURLReuestIdentifierKey];
- }
- - (NSString *)qn_domain{
- NSString *host = self.allHTTPHeaderFields[kQNURLReuestHostKey];
- if (host == nil) {
- host = self.URL.host;
- }
- return host;
- }
- - (NSDictionary *)qn_allHTTPHeaderFields{
- NSDictionary *headerFields = [self.allHTTPHeaderFields copy];
- NSMutableDictionary *headerFieldsNew = [NSMutableDictionary dictionary];
- for (NSString *key in headerFields) {
- if (![key isEqualToString:kQNURLReuestIdentifierKey]) {
- [headerFieldsNew setObject:headerFields[key] forKey:key];
- }
- }
- return [headerFieldsNew copy];
- }
- + (instancetype)qn_requestWithURL:(NSURL *)url{
- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
- [request setValue:url.host forHTTPHeaderField:kQNURLReuestHostKey];
- return request;
- }
- - (NSData *)qn_getHttpBody{
-
- if (self.HTTPBody || ![self.HTTPMethod isEqualToString:@"POST"]) {
- return self.HTTPBody;
- }
-
- NSInteger maxLength = 1024;
- uint8_t d[maxLength];
-
- NSInputStream *stream = self.HTTPBodyStream;
- NSMutableData *data = [NSMutableData data];
-
- [stream open];
-
- BOOL end = NO;
-
- while (!end) {
- NSInteger bytesRead = [stream read:d maxLength:maxLength];
- if (bytesRead == 0) {
- end = YES;
- } else if (bytesRead == -1){
- end = YES;
- } else if (stream.streamError == nil){
- [data appendBytes:(void *)d length:bytesRead];
- }
- }
- [stream close];
- return [data copy];
- }
- - (BOOL)qn_isHttps{
- if ([self.URL.absoluteString rangeOfString:@"https://"].location != NSNotFound) {
- return YES;
- } else {
- return NO;
- }
- }
- @end
- @implementation NSMutableURLRequest(QNRequest)
- - (void)setQn_domain:(NSString *)qn_domain{
- if (qn_domain) {
- [self addValue:qn_domain forHTTPHeaderField:kQNURLReuestHostKey];
- } else {
- [self setValue:nil forHTTPHeaderField:kQNURLReuestHostKey];
- }
- NSString *identifier = [NSString stringWithFormat:@"%p-%@", &self, qn_domain];
- [self setQn_identifier:identifier];
- }
- - (void)setQn_identifier:(NSString *)qn_identifier{
- if (qn_identifier) {
- [self addValue:qn_identifier forHTTPHeaderField:kQNURLReuestIdentifierKey];
- } else {
- [self setValue:nil forHTTPHeaderField:kQNURLReuestIdentifierKey];
- }
- }
- @end
|