我想以编程方式检索我的应用程序的User-Agent字符串.(注意:不是我的应用程序中的UIWebView的UA; NSURLConnection基于UA 的HTTP请求.)
有很多关于如何阅读应用程序的指南UIWebView User-Agent,但没有关于如何获取其HTTP请求中的<appname>/1.0 CFNetwork/456.23字符串的指南CFNetwork.有用于CFHTTPMessage复制所有标题字段的API ,但我只有一个NSURLRequest和一个NSURLResponse,这些是非桥接的不透明类型.救命!
(一些好的背景阅读:改变NSURLConnection的的userAgent提到,我想在格式.什么HTTP用户代理程序的iOS我做广告节目本身?确实也是如此.)
Apple 已经创建了那个著名的 Reachability 类,但是查看代码我不太信任它。格式和标题很乱。
它也无法帮助显示“您没有互联网!” 警报。
我只想做:
在某些时候下载一个 XML。
当没有互联网时,显示警报。
当下载 XML 时 Internet 断开连接,显示警报。
在我的应用程序中,用户没有点击下载按钮,这一切都在后台自动发生。
就是这样。真的。我现在在 Reachability 上花了 3 个小时,我的大脑拒绝了它。
有人用干净的标题和干净的代码创建了一个聪明的替代方案吗?使用起来非常简单的东西?
在对我的iOS 6应用程序进行了一些更改后(其中没有一个实际上与网络有关),我开始遇到一个奇怪的错误,我的流事件处理程序.这在iOS 5和iOS 6上都会发生,但在iOS 5上更频繁.这个错误每50秒发生一次,我的流事件处理程序遇到了NSStreamEventErrorOccurred.错误信息如下:
Application[6370:707] Error Occured with stream [<__NSCFInputStream: 0xd622ab0>]
Application[6370:707] Stream Status: 7
Application[6370:707] Error Code: 57
Application[6370:707] Error Desc: The operation couldn’t be completed. Socket is not connected
Application[6370:707] Error Reason: Socket is not connected
Application[6370:707] Error Domain: NSPOSIXErrorDomain
Run Code Online (Sandbox Code Playgroud)
发生此错误后,处理程序将遇到一对'连接重置对等'TCP错误,我认为这是由服务器发送RST数据包引起的.是否有任何其他方案可能导致此错误?我的应用程序正在连接到以AP模式广播wifi网络的硬件设备.
以下是我的NSStreamEventHasBytesAvailable活动代码.
case NSStreamEventHasBytesAvailable: {
NSLog(@"Stream has bytes available! Stream is %@", stream);
if (stream == iStream)
{
@try {
uint8_t buf[2048];
unsigned int len = 0;
len = [(NSInputStream *)stream …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用FTP服务器.我已经搜索了所有内容,对于像我这样的初学者来说,一切都很难理解.SimpleFTPSample很难理解,因为它一次很多.视图,按钮,标签,textflelds,上传,下载,请求,列表,获取.与BlackRaccoon和其他一切相同.
如何简单和程序地将"test.txt"上传到FTP服务器:Xcode(iPhone应用程序)中的"192.168.1.111"没有视图或按钮.只是可以在ViewDidLoad中的代码.
也许这样的事情?:
NSURL* url = [NSURL URLWithString:@"ftp://username:pw@189.92.32.34"];
CFReadStreamRef stream = CFReadStreamCreateWithFTPURL(NULL, (__bridge CFURLRef) url);
stream.delegate= self;
[stream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[stream open];
Run Code Online (Sandbox Code Playgroud)
但是哪个档案?展开它,或编写新代码.我不知道,这对我来说是新的.
谢谢乔纳森
我希望能够以编程方式查看TLS握手信息,并能够执行以下操作:
NSLog(@"Client Hello");
//...
NSLog(@"Server Hello");
Run Code Online (Sandbox Code Playgroud)
有一篇很好的博客文章更详细地显示了握手信息(或参见下面的wireshark捕获图片).
我已经在使用ASIHTTPRequest,因此下面的代码示例来自该代码库.但是,如果可以使用它来记录TLS握手信息,我会认真考虑切换到更现代的AFNetworking库.我相信AFNetworking使用不同的对象(即NSURLConnection,NSURLCredential).
我正在向流添加SecIdentityRef(查看更多代码上下文).
CFReadStreamSetProperty((CFReadStreamRef)[self readStream], kCFStreamPropertySSLSettings, sslProperties);
Run Code Online (Sandbox Code Playgroud)
我列出了以下网络事件:
static const CFOptionFlags kNetworkEvents = kCFStreamEventOpenCompleted | kCFStreamEventCanAcceptBytes | kCFStreamEventHasBytesAvailable | kCFStreamEventEndEncountered | kCFStreamEventErrorOccurred;
Run Code Online (Sandbox Code Playgroud)
此事件在文档的CFStream部分中描述.
这是流的打开方式(查看更多代码上下文):
CFStreamClientContext ctxt = {0, self, NULL, NULL, NULL};
if (CFReadStreamSetClient((CFReadStreamRef)[self readStream], kNetworkEvents, ReadStreamClientCallBack, &ctxt)) {
if (CFReadStreamOpen((CFReadStreamRef)[self readStream])) {
streamSuccessfullyOpened = YES;
}
}
Run Code Online (Sandbox Code Playgroud)
调用callback(ReadStreamClientCallBack)来处理事件时使用switch语句:
switch (type) {
case kCFStreamEventHasBytesAvailable:
//...
break;
case kCFStreamEventEndEncountered:
//...
break; …Run Code Online (Sandbox Code Playgroud) 我正在使用Alamofire,在我的应用程序运行几个小时后,我在模拟器上遇到了这个错误.
***由于未捕获的异常'NSGenericException'而终止应用程序,原因是:'开始日期不能晚于结束日期!'
我在控制台中得到了这个堆栈跟踪:
*** First throw call stack:
(
0 CoreFoundation 0x0000000111186d4b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x0000000110be821e objc_exception_throw + 48
2 Foundation 0x00000001107f0e3c -[_NSConcreteDateInterval dealloc] + 0
3 CFNetwork 0x00000001131a18e8 -[__NSCFURLSessionTaskMetrics _initWithTask:] + 868
4 CFNetwork 0x00000001131a1497 -[NSURLSessionTaskMetrics _initWithTask:] + 100
5 CFNetwork 0x0000000112f77bc7 -[__NSCFURLLocalSessionConnection _tick_finishing] + 351
6 libdispatch.dylib 0x00000001128e3978 _dispatch_call_block_and_release + 12
7 libdispatch.dylib 0x000000011290d0cd _dispatch_client_callout + 8
8 libdispatch.dylib 0x00000001128eae17 _dispatch_queue_serial_drain + 236
9 libdispatch.dylib 0x00000001128ebb4b _dispatch_queue_invoke + 1073
10 libdispatch.dylib 0x00000001128ee385 _dispatch_root_queue_drain + 720
11 …Run Code Online (Sandbox Code Playgroud) 崩溃日志:1 CRASH 1 USER
CFNetwork CFAllocatedReferenceCountedObject :: _ retainable_hash(void const*)
崩溃:com.apple.CFNetwork.LoaderQ
0 CFNetwork 0x183985310 CFAllocatedReferenceCountedObject::_retainable_hash(void const*) + 26
1 CoreFoundation 0x18321e160 CFBasicHashFindBucket + 164
2 CoreFoundation 0x18321e0a0 CFDictionaryGetValue
+ 224
3 CFNetwork 0x1839b5a4c TubeManager::_onqueue_enqueueRequestForProtocol(MetaConnectionCacheClient*, HTTPRequestMessage const*, MetaConnectionOptions, BaseAwaitingTube*) + 80
4 CFNetwork 0x1839b69b4 TubeManager::_onqueue_reenqueueAwaitingTube(BaseAwaitingTube*) + 112
5 CFNetwork 0x1839b6c14 invocation function for block in TubeManager::_onqueue_newTubeReady(Tube*, CFStreamError) + 28
6 CFNetwork 0x183b152e4 invocation function for block in QCoreSchedulingSet::performAsync(void () block_pointer) const
+ 52
7 libdispatch.dylib 0x182cdea54 _dispatch_call_block_and_release + 24
8 libdispatch.dylib …Run Code Online (Sandbox Code Playgroud) 我想在我的项目中添加异步传输功能.
我希望在我的申请中关注.
但问题是到目前为止我使用的是同步传输.即加载所有数据然后显示包括图像.
现在,像苹果商店的表视图图像有时加载.我知道那是异步传输.
即使我试图理解pokeb-asi的例子.
但问题如下.
"我无法在iPhone的新应用程序中添加所有这些框架和文件(这是异步传输所必需的)."
问题是如何做到这一点?
编辑:
框架已成功添加.
现在我已将ASINetworkQueue.h&m + ASINSStringAdditions.h&m&所有文件添加到我的项目中.
我收到了这种错误.
- ASIHTTPRequest.o中的[ASIHTTPRequest attemptToApplyProxyCredentialsAndResume]
所有错误都是.o类型.
_SCNetworkReachabilityGetFlags引自:Reachability.o中的[Reachability remoteHostStatus]
如何解决这个错误?
我正在开发一个股票软件,客户端将从服务器接收数据,所以我想使用CFNetwork.我在哪里可以找到"网络入门"教程,谢谢
我用Xcode6 Beta 2写了一个Swift应用程序,它使用NSURLRequest和等的CFNetwork类进行网络连接NSHTTPURLResponse.
该应用程序适用于iOS 8,当我尝试在iOS 7设备或运行iOS 7的模拟器上运行时,我在启动应用程序时遇到以下错误:
dyld: Symbol not found: _OBJC_CLASS_$_NSHTTPURLResponse
Referenced from: /Users/patrick/Library/Developer/CoreSimulator/Devices/B0A61F43-A67C-4803-8F5D-77C3972107BE/data/Applications/E0C7C89F-9EEE-4893-BE5B-FCC224F2855D/CheckYourWeather.app/CheckYourWeather
Expected in: /Applications/Xcode6-Beta2.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/System/Library/Frameworks/CFNetwork.framework/CFNetwork
in /Users/patrick/Library/Developer/CoreSimulator/Devices/B0A61F43-A67C-4803-8F5D-77C3972107BE/data/Applications/E0C7C89F-9EEE-4893-BE5B-FCC224F2855D/CheckYourWeather.app/CheckYourWeather
Run Code Online (Sandbox Code Playgroud)
我做了一些研究,发现这是一个链接问题.不过,我知道我正在使用的类已经在iOS 7中可用了.
我还尝试CFNetwork.framework在项目设置中添加框架并将其设置为可选,这只会导致App在运行时崩溃.
对我来说令人困惑的部分是:我写了一个测试应用程序,只是将我在主应用程序中使用的代码粘贴到它中,它运行得很好.因此代码可能不是问题.
从模拟器/设备删除应用程序,清理项目并删除Xcode的DerivedData没有解决问题.
更新:
这是导致崩溃的代码:
extension NSURLRequest {
class func plainPostRequest(url: NSURL, httpBody: String) -> NSURLRequest {
let urlRequest = NSMutableURLRequest(URL: url)
urlRequest.HTTPMethod = "POST"
urlRequest.HTTPBody = httpBody.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
urlRequest.setValue("text/plain", forHTTPHeaderField: "Content-Type")
return urlRequest
}
}
Run Code Online (Sandbox Code Playgroud)
但这只是一个例子.任何使用CFNetwork类都会导致应用程序在启动期间崩溃.
cfnetwork ×10
ios ×7
iphone ×4
objective-c ×2
swift ×2
xcode ×2
alamofire ×1
asynchronous ×1
cfnetworking ×1
crash ×1
ftp ×1
ios6 ×1
ios7 ×1
ipad ×1
nsstream ×1
posix ×1
reachability ×1
user-agent ×1
xcode6 ×1