qiniu / happy-dns-objc Goto Github PK
View Code? Open in Web Editor NEWdns library for objective c
License: MIT License
dns library for objective c
License: MIT License
比如需要定位到就近的cdn节点
除了这个 nsurlconnection 方法之外
NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&httpError];
dns解析为:http://122.13.170.7/b/goods?anonymous=0&anonymous_id=90668dbc-1ca4-4872-b43e-1fa7489f5d19&channel_id=1&xrk_is_share=0&token=f066ff5a574f17a85d359af574c22a02&f_source=app-index-tool-2&sso_id=3205906
并设置请求头host:super.bxr.im
请求成功,但是response的Set-Cookie,貌似没保存到。
再请求:http://122.13.170.7/b/commission/3205906?t=1464576038824&ct_sso_id=3205906&ct_channel_id=1&ct_f_source=
没有前一个请求的返回cookie,导致请求失败
这个如何解决?
[QNDnsManager needHttpDns] 、[QNDnsManager setGetAddrInfoBlock:^NSArray *(NSString *host) {
return [dns query:host];
}]; 没有这2个函数呢
QNDnsManager.h :135:14:
/**
* 设置底层 业务统计 如connect 回调使用的Callback
*
* @param dns 回调用的dnsmanager
*/
+ (void)setIpStatusCallback:(QNIpStatusCallback)block;
我在使用initWithConfiguration创建QNUploadManager时传入了QNConfiguration,但是运行时崩溃了,原因是是QNConfigurationBuilder里dns属性为assign导致。
@synchronized(_cache) {
if ([_curNetwork isEqualToInfo:[QNNetworkInfo normal]] && [QNNetworkInfo isNetworkChanged]) {
[_cache removeAllObjects];
_resolverStatus = 0;
} else {
result = [_cache objectForKey:domain.domain];
}
}
如题所述情况下,确认是走的else,得到的result是nil。并没有发现代码中有其他地方清cache
类似
dig www.bbc.com @8.8.8.8 + tcp
现有模式还是udp的
Hi,
NSURL *u2 = [dns queryAndReplaceWithIP:u];
这里能外部指定ip么?我的服务端会下发不同的ip,希望直接在客户端请求的时候直接使用下发的ip(而不是通过dns解析出来的ip),不知道该怎么实现呢?
UIWebView加载网页,是否可以使用这套dns解析?
建议提供相关Sample工程。
有点看不懂 readme 里面的内容
Can this be used to change cellular DNS value in iOS?
Hi,
network failure: Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLStringKey=https://54.255.32.12/v1.0/report, NSErrorFailingURLKey=https://54.255.32.12/v1.0/report, _NSURLErrorRelatedURLSessionTaskErrorKey=(
"LocalDataTask <6B1DA05D-25CB-4DA8-9368-A7CF0FC40CCD>.<7>"
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <6B1DA05D-25CB-4DA8-9368-A7CF0FC40CCD>.<7>, NSLocalizedDescription=cancelled}
我就是简单的替换了NSUurl,需要该如何才能在接下来的https请求生效呢,有没有集成http请求的demo呢?
我看网上说需要将http请求中的header中的字段host改成原始的域名,但是尝试后也没有效果。
1.先pod 'HappyDNS', '~> 0.1.1'到项目中;
2.项目中使用QNDnsManager 返回ips;
NSMutableArray *array = [[NSMutableArray alloc]init];
[array addObject:[QNResolver systemResolver]];
[array addObject:[[QNResolver alloc] initWithAddres:@"114.114.115.115"]];
QNDnsManager *dnsManager = [[QNDnsManager alloc] init:array networkInfo:[QNNetworkInfo normal]];
NSArray *ips = [dnsManager query:@"http://xxxx.com2.z0.glb.qiniucdn.com"];
3.请求七牛图片时使用ip替换域名http://xxxx.com2.z0.glb.qiniucdn.com,并设置HTTPHeadField;
[SDWebImageManager.sharedManager.imageDownloader setValue:@"http://xxxx.com2.z0.glb.qiniucdn.com" forHTTPHeaderField:@"Host"];
注:自己封装请求图片时使用[request setValue: @"http://xxxx.com2.z0.glb.qiniucdn.com" forHTTPHeaderField:@"Host"];
4.项目中因为图片还有其他来源,这里区分使用设置HTTPHeadField中Host;
SDWebImageManager.sharedManager.imageDownloader.headersFilter = ^NSDictionary *(NSURL *url, NSDictionary *headers)
{
NSMutableDictionary *mutableHeaders = [headers mutableCopy];
[mutableHeaders removeObjectForKey:@"Host"];
//是否为ip格式
if ([url.host rh_isIp])
{
[mutableHeaders setValue:@"xxxx.com2.z0.glb.qiniucdn.com" forKey:@"Host"];
}
return mutableHeaders;
};
最后,谢谢longbai在此过程中提供的帮助,由于缺少相关文档,冒昧抛砖引玉,希望可以帮助到小伙伴们,欢迎一起交流!
pod 'HappyDNS', '~> 0.2'
when i uses #import "HappyDNS.h"
'HappyDNS.h' file not found
release 里写了全面兼容 ipv6,不过我对照这片文章过了一下几个兼容点时,其中有一点
IPV4时只需要通过res_ninit进行初始化就可以获取,但是在IPV6环境下需要通过res_getservers()接口才能获取。
在0.3.3.1版本的 setup_dns_server 里只有使用 res_ninit ,这样也可以兼容 ipv6 吗?
多谢
happy-dns可以和afnetworking配合使用吗?目前我们在联通3/4g网发现无法查找主机的问题,已经确定是dns的问题所以我们想在afnetworking使用httpdns,不知道是不是能够兼容?
Bugly 统计,HappytDNS 导致 崩溃很频繁。
NSGenericException
*** Collection <__NSArrayM: 0x1513962d0> was mutated while being enumerated.
解析原始
0 CoreFoundation ___exceptionPreprocess + 124
1 libobjc.A.dylib objc_exception_throw + 56
2 CoreFoundation -[NSException name]
3 HappyDNS records2Ips + 208
4 HappyDNS -[QNDnsManager queryInternalWithDomain:] + 1472
5 HappyDNS -[QNDnsManager queryWithDomain:] + 228
6 Qiniu -[QNSessionManager sendRequest:withCompleteBlock:withProgressBlock:withCancelBlock:] + 944
7 libdispatch.dylib __dispatch_call_block_and_release + 24
8 libdispatch.dylib __dispatch_client_callout + 16
9 libdispatch.dylib __dispatch_root_queue_drain + 2140
10 libdispatch.dylib __dispatch_worker_thread3 + 112
11 libsystem_pthread.dylib _pthread_wqthread + 1092
12 libsystem_pthread.dylib start_wqthread + 4
具体问题在 QNDnsManager.m
文件中, 对 queryInternalWithDomain
方法进行了异步调用,并且在@synchronized
块 中对 result 数组进行了更改,所以会导致崩溃, 建议在 records2Ips
方法中 的 for (QNRecord *r in records)
改为 for (QNRecord *r in [records copy])
或者不要使用 for in 来进行循环。
static NSArray *records2Ips(NSArray *records) {
NSMutableArray *array = [[NSMutableArray alloc] init];
for (QNRecord *r in records) { // 此处使用 for in 遍历会有问题
[array addObject:r.value];
}
return array;
}
- (NSArray *)queryInternalWithDomain:(QNDomain *)domain {
if (domain.hostsFirst) {
NSArray *ret = [_hosts query:domain networkInfo:_curNetwork];
if (ret != nil && ret.count != 0) {
return ret;
}
}
NSMutableArray *result;
@synchronized(_cache) {
if ([_curNetwork isEqualToInfo:[QNNetworkInfo normal]] && [QNNetworkInfo isNetworkChanged]) {
[_cache removeAllObjects];
_resolverStatus = 0;
} else {
result = [_cache objectForKey:domain.domain];
if (result != nil && result.count > 1) {
QNRecord *first = [result firstObject];
[result removeObjectAtIndex:0]; // 此处对 result 进行了修改
[result addObject:first];
}
}
}
if (result != nil && result.count > 0) {
QNRecord *record = [result objectAtIndex:0];
if (![record expired:[[NSDate date] timeIntervalSince1970]]) {
return records2Ips(result);
}
}
...
使用NSURLProtocol代理了UiWebView的请求,用HappyDNS将url的host转换成了ip,但是有些服务器设置了禁止ip访问,所以直接返回了404,问下有没有什么解决办法???
应该是-lresolv而不是-lresolve
比如说在SDWebImage里配置了happydns,然后加载图片时触发了dns查询, 当然图片很多请求次数也很频繁,会不会出现一种情况:第一次dns查询还未完成,后边又多次调用了query方法,导致发出了N个指向同一个Host的dns查询请求?
导入系统库时"#include "string.h" " 这种写法是不规范的,应该修改为 "#include <string.h>",后面的两个也一样。
使用了第一种写法,如果有第三方库中定义了string.h 文件的话,两个库在一起很可能就会报错。
当然,我在这里提这个问题正式因为我们在使用 grpc的时候遇到这个尴尬的问题。所以,为了以后同学能够更好的使用,希望你们能够采纳我的建议,修改掉代码里的这种用法。
期待你们的回复
在某些用户的手机上出现的这种情况,query返回的array里包含空字符串。我自己没对结果做太多判断结果坑了。。
如果可以的话请在podspec里加s.watchos.deployment_target = '2.0'
因为我需要修改源代码,所以想手动集成,结果报错了。
Undefined symbols for architecture arm64:
"_res_9_setservers", referenced from:
_setup_dns_server in QNResolvUtil.o
"_res_9_ninit", referenced from:
+[QNResolver systemDnsServer] in QNResolver.o
_setup_dns_server in QNResolvUtil.o
"_res_9_getservers", referenced from:
+[QNResolver systemDnsServer] in QNResolver.o
"_res_9_ns_name_uncompress", referenced from:
_query_ip_v4 in QNResolver.o
"_res_9_ns_parserr", referenced from:
_query_ip in QNTxtResolver.o
_query_ip_v4 in QNResolver.o
"_res_9_nquery", referenced from:
_query_ip in QNTxtResolver.o
_query_ip_v4 in QNResolver.o
"_res_9_ns_initparse", referenced from:
_query_ip in QNTxtResolver.o
_query_ip_v4 in QNResolver.o
"_res_9_ndestroy", referenced from:
_query_ip in QNTxtResolver.o
_query_ip_v4 in QNResolver.o
+[QNResolver systemDnsServer] in QNResolver.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
qiniu的官方oc-sdk已经更新了,但是happy-dns中依然有ipv4的api,希望可以优化一下
hello,qiniu.
初次查询大概要花多少时间?第二次查询时间会缩短吗?
不知道HappyDNS自己有没有缓存机制,开发者有没有必要自己缓存查询结果?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.