我在我的应用程序中使用ASIHTTPRequst并且遇到了一些问题,但仅限于某些设备.在某些情况下,我收到以下错误:
"检测到不正确的NSStringEncoding值0x0000.假设NSASCIIStringEncoding.将在不久的将来停止这种兼容性映射行为"
我得到了有限的测试选项,因为它适用于我的所有内部测试设备,但问题仍然发生在我的一个或多个客户端测试手机上.这也可能是手机连接到蜂窝网络的情况,因为它似乎正在使用wifi.
有谁知道可能导致问题的原因是什么?我看到有类似的问题类型,但我的代码看起来是正确的,从其他问题答案和ASIHTTPRequest网站.
编辑 发生错误时,不会收到服务器的响应,因此用户卡在注册/登录状态.
urlEncodeValue:
- (NSString *)urlEncodeValue:(NSString *)str
{
NSString *result = (NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8);
return [result autorelease];
}
Run Code Online (Sandbox Code Playgroud)
ASIHTTPRequest代码段:
NSString *encodedUrlAdress = [NSString stringWithFormat:@"%@user/register/%@/%@/%@/%d/%@/%@/%@/%@",
kUserServerAddress,
[self urlEncodeValue:_firstName],
[self urlEncodeValue:_lastName],
[self urlEncodeValue:_phoneNumber],
_sex,
[self urlEncodeValue:_birthDate],
[self urlEncodeValue:_address],
[self urlEncodeValue:_postalNumber]];
NSLog(@"encodedUrlAdress: %@", encodedUrlAdress);
NSURL *url = [NSURL URLWithString:encodedUrlAdress];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSError *error = [request error];
if (!error) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud) 我有一个奇怪的问题.
我ASIHTTPRequest在启用了ARC的iOS 5项目中使用.由于ASIHTTPRequest不支持ARC我已在所有单个ASIHTTPRequest文件上禁用ARC .

但是,当我尝试编译我的项目时,xcode仍然认为这些文件是启用ARC的,它会抱怨.

我做错了什么或是xcode中的错误?不要告诉我ASIHTTPRequest使用重构工具转换为ARC兼容代码.我试图这样做,xcode抱怨项目上启用了ARC(?!?!).
我正在尝试将我的代码从ASIHTTPRequest更改为AFNetworking.目前我想选择10-15个不同的HTTP URL(文件)并将它们下载到文档文件夹.
使用ASIHTTPRequest非常简单
[myQueue setDownloadProgressDelegate:myUIProgressView];
Run Code Online (Sandbox Code Playgroud)
在AFNetworking中我无法弄清楚如何做到这一点.我有以下代码下载文件,存储它们并在文件成功下载时通知,但我无法为此队列创建总大小的进度条.
for (i=0; i<3; i++) {
NSString *urlpath = [NSString stringWithFormat:@"http://www.domain.com/file.zip"];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlpath]];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"testFile%i.zip",i]];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Successfully downloaded file to %@", path);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
[operation setDownloadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) {
NSLog(@"Sent %d of %d …Run Code Online (Sandbox Code Playgroud) 我已将"ASIHTTPRequest"库添加到我的应用程序中.现在,我正在尝试删除项目中的所有警告.我已经修复了除"ASIHTTPRequest"之外的所有其他警告.我收到下面的警告.
不推荐使用'kCFStreamSSLAllowsExpiredCertificates':
不推荐使用'kCFStreamSSLAllowsAnyRoot':
怎么解决这个?
码:
NSDictionary *sslProperties = [[NSDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithBool:YES], kCFStreamSSLAllowsExpiredCertificates,
[NSNumber numberWithBool:YES], kCFStreamSSLAllowsAnyRoot,
[NSNumber numberWithBool:NO], kCFStreamSSLValidatesCertificateChain,
kCFNull,kCFStreamSSLPeerName,
nil];
Run Code Online (Sandbox Code Playgroud)

我已经检查了与此相关的其他问题,但唯一的答案是"使用ASIHTTPRequest",因为这已经不再开发了我想问一下人们正在使用什么替代方案,而在我们的SDK上工作时我遇到了很多奇怪的行为NSURLConnection从服务器接收数据时.
我们追踪到的事实是,NSURLConnection它不能很好地处理分块编码中的响应.或者至少我们在这里阅读NSURLConnection和"chunked"转移编码这个问题
我们正在谈论的一些开发人员说它在iOS 5中变得更好,我们需要确保我们的SDK至少与iOS 4.3向后兼容.
我想确认这是一个问题NSURLConnection,以及人们如何处理它.
到目前为止,我发现的所有替代方案都是基于NSURLConnection并且我假设因此具有相同的缺陷.ASIHTTPRequest事实上确实有效,因为它的基础略低于NSURLConnection,但正在寻找不再支持的知识替代品.
其他的库列表看着是:
Restkit,
ShareKit,
LRResty,
AFNetworking,
TTURLRequest
我知道这里有类似的问题RESTKit是ASIHTTPRequest的一个很好的替代品吗?这里ASIHTTPRequest替代方案但这两个解决方案都基于NSURLConnection.
编辑:我注意到我在帖子的开头指出了错误的问题,所以更新了.它指向了2008年的一个主题,我看到了类似的但没有最新的.
ASIHTTPRequest是否支持HTTPS连接?我的连接现在适用于HTTP连接和错误,如果我尝试HTTPS连接.(进入requestFailed并给我一个ASIHTTPErrorRequestDomain)
-(void) getData
{
av.hidden = NO;
[av startAnimating];
NSString *urlString = [IP stringByAppendingString:@"Method1"];
NSURL *url = [NSURL URLWithString:urlString];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
NSLog(@"URL = %@",url);
[request setRequestMethod:@"POST"];
[request setPostValue:@"val1" forKey:@"key1"];
[request setPostValue:@"val2" forKey:@"key2"];
[request setDelegate:self];
[request startAsynchronous];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
// Use when fetching text data
//NSString *responseString = [request responseString];
// Use when fetching binary data
NSData *responseData = [request responseData];
[self parseData:responseData];
[av stopAnimating];
av.hidden = YES;
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error …Run Code Online (Sandbox Code Playgroud) 我已经实现了所有ASIHTTPRequest文件,但遗憾的是发生了以下错误:


为什么会这样?
我正在尝试使用自签名证书来处理我的应用程序.
我现在正在使用ASIHTTPRequest库,如下所示:
- (IBAction)sendHttpsRequest
{
//Set request address
NSMutableString *databaseURL = [[NSMutableString alloc] initWithString:@"https://142.18.87.46:443"];
//call ASIHTTP delegates (Used to connect to database)
NSURL *url = [NSURL URLWithString:databaseURL];
//This sets up all other request
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setDelegate:self];
[request setValidatesSecureCertificate:YES];
[request startAsynchronous];
}
Run Code Online (Sandbox Code Playgroud)
我已经将setValidatesSecureCertificate设置为YES,希望会发生一些事情,但显然什么都没有,因为我不确定我必须做什么.
这是我在日志中收到的错误
2011-12-06 14:27:33.514 connectionTest[916:207] Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred: SSL problem (Possible causes may include a bad/expired/self-signed certificate, clock set to wrong date)" UserInfo=0x683a860 {NSUnderlyingError=0x68390d0 "The operation couldn’t be completed. (OSStatus error …Run Code Online (Sandbox Code Playgroud) 我已经开始在我的iOS项目中使用ASIHTTPRequest来执行REST服务器方法调用,到目前为止它已经非常成功.我只有一个奇怪的间歇性问题.偶尔我使用[ASIHTTPRequest startAsynchronous]得到以下响应:
HTTP/0.9 200 OK
发生这种情况时,我的服务器方法不会被调用.通常,每个方法调用都会返回一个以"HTTP/1.1"开头的响应.我正在使用带有GeoTrust/RapidSSL证书的HTTPS来保护连接.有趣的是,如果我尝试连接到SSL端口(443)但指定'http'作为协议,我发现我得到了相同的'HTTP/0.9 200 OK'响应.
只是为了添加更多信息 - 问题主要发生在应用程序闲置一段时间后.例如请求成功完成,然后让应用程序空闲一段时间,然后在下一个请求发生问题然后应用程序继续正常工作.
任何人都可以了解可能发生的事情吗?
非常感谢,乔纳森
更新:当问题发生时,我已经粘贴了ASIHTTPRequest输出的一些调试信息:
2012-07-12 09:35:49.376 mytestapp[3038:18f07] [CONNECTION] Closing connection #13 because it has expired
2012-07-12 09:35:49.377 mytestapp[3038:18f07] [CONNECTION] Closing connection #14 because it has expired
2012-07-12 09:35:49.378 mytestapp[3038:18f07] [CONNECTION] Closing connection #15 because it has expired
2012-07-12 09:35:49.380 mytestapp[3038:18f07] [CONNECTION] Request #39 will use connection #16
2012-07-12 09:35:49.381 mytestapp[3038:18f07] [CONNECTION] Request #40 will use connection #17
2012-07-12 09:35:49.382 mytestapp[3038:18f07] [CONNECTION] Request #41 will use connection #18
2012-07-12 09:35:49.529 mytestapp[3038:18f07] …Run Code Online (Sandbox Code Playgroud) 我已导入ASIHTTP files我的项目,里面 ASIWebPageRequest.m有以下导入:
#import <libxml/HTMLparser.h>
Run Code Online (Sandbox Code Playgroud)
这是不被承认的.我应该添加哪些库才能被识别?
asihttprequest ×10
ios ×7
iphone ×7
objective-c ×3
xcode ×2
afnetworking ×1
https ×1
rest ×1
xcode4.2 ×1