AFNetWorking使用报错Request failed: unacceptable content-type: text/plain

本文介绍了如何解决AFNetworking不支持text/plain内容类型的问题。提供了两种方法:一是修改AFURLResponseSerialization.m文件,二是通过AFHTTPSessionManager设置响应序列化器的可接受内容类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用AFNetWorking遇到的问题:AFNetworking[1532:102076] error = Request failed: unacceptable content-type: text/plain

AFN默认只支持@"application/json", @"text/json", @"text/javascript"这几种格式。

方法一:

打开AFURLResponseSerialization.m文件中的init方法查看可知:
- (instancetype)init {
self = [super init];
if (!self) {
return nil;
}
self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];
return self;
}

直接在NSSet添加对象后面添加@“text/plain”这一格式即可。

方法二:

使用AFN3.0的类方法得到Session的单例,前面的属性顾名思义:manager.responseSerializer.acceptableContentTypes–>单例的相应序列的可接收内容类型
然后仿照源码的写法,用NSSet 加入一个@“text/plain”类型的对象。

 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];

尊重原创:
http://blog.youkuaiyun.com/macanv/article/details/50525529

<think>好的,我需要解决用户遇到的“Connection refused”和“unacceptable protocol version”这两个问题。首先,我得分别分析这两个错误的原因,然后给出相应的解决方案。 对于“Connection refused”(连接被拒绝),常见的原因可能包括服务未运行、防火墙阻止、端口监听问题或配置错误。比如,用户可能试图连接到没有运行服务的端口,或者防火墙规则阻止了连接。我需要参考引用中的信息,比如引用[1]提到虚拟机连接问题可能与服务配置有关,引用[3]提到FTP连接被拒绝可能与DNS或软件版本有关。这可能涉及到检查服务状态、确认端口监听情况、检查防火墙设置,以及查看DNS解析是否正确。 接下来是“unacceptable protocol version”(不支持的协议版本),这通常发生在客户端和服务器使用的协议版本不兼容时。比如,SSH客户端使用旧的协议版本而服务器已升级到更高版本,或者相反。需要检查双方的协议支持情况,可能涉及升级软件版本或调整配置强制使用兼容的协议版本。引用[2]提到传输层的安全问题,可能涉及到协议配置不当导致的问题,比如SSH的配置限制。 我需要将解决方案分步骤整理,确保用户能逐步排查。例如,先确认服务是否运行,检查端口监听,然后检查防火墙和SELinux,接着处理协议版本问题,可能需要更新软件或修改配置文件。同时,要注意引用相关的资料,比如引用[1]中提到的解决方案可能需要检查服务配置,引用[3]中的DNS问题可能需要修改DNS设置。 还需要考虑用户的实际操作环境,比如是否在虚拟机中使用Ubuntu,是否使用特定的工具如FileZilla,这些因素可能会影响解决方案的具体步骤。例如,在SSH连接时,检查sshd_config文件中的Protocol设置,确保支持客户端使用的版本。对于协议版本问题,可能需要显式指定协议版本,如使用SSH命令的选项。 最后,生成相关问题,帮助用户深入理解问题,比如协议兼容性的影响或防火墙配置的最佳实践。确保每个步骤清晰,用户能够跟随操作,同时引用适当的部分来增强可信度。</think>### 解决"Connection refused"和"unacceptable protocol version"问题的分步指南 #### 一、Connection refused (ECONNREFUSED) 问题排查 1. **确认目标服务是否运行** - 执行命令检查服务状态: ```bash systemctl status sshd # 以SSH服务为例 ``` - 若服务未启动,使用: ```bash sudo systemctl restart sshd ``` 2. **验证端口监听状态** - 使用`netstat`检查端口监听: ```bash netstat -tuln | grep :22 # 查看22端口监听状态 ``` - 若未监听,需检查服务配置文件(如SSH的`/etc/ssh/sshd_config`中`Port`设置)[^1] 3. **防火墙和SELinux检查** ```bash sudo ufw status # Ubuntu查看防火墙状态 sudo iptables -L -n # 检查iptables规则 getenforce # 查看SELinux状态 ``` 临时关闭测试: ```bash sudo ufw disable && sudo setenforce 0 ``` 4. **DNS解析验证** ```bash nslookup obs.myhuaweicloud.com # 华为云OBS域名解析测试 ``` 若解析失败,修改`/etc/resolv.conf`使用内网DNS: ``` nameserver 100.125.xx.xx # 华为云内网DNS ``` #### 二、Unacceptable protocol version 问题处理 1. **协议版本强制指定** - SSH连接时指定协议版本: ```bash ssh -o Protocol=2 user@host # 强制使用SSHv2 ``` 2. **服务端协议配置** 修改`/etc/ssh/sshd_config`: ```bash Protocol 2 # 仅支持SSHv2 ``` 重启服务: ```bash sudo systemctl restart sshd ``` 3. **软件升级** - OpenSSH升级(CentOS示例): ```bash sudo yum update openssh-server ``` - 检查OpenSSL版本: ```bash openssl version # 要求≥1.0.2[^3] ``` #### 三、综合排查流程 ```mermaid graph TD A[连接失败] --> B{错误类型} B -->|ECONNREFUSED| C[服务/端口/防火墙检查] B -->|协议版本错误| D[协议配置/软件升级] C --> E[确认服务状态] C --> F[验证端口监听] C --> G[检查防火墙规则] D --> H[修改ssh_config] D --> I[升级openssh] ``` #### 典型场景解决方案 **FileZilla连接虚拟机报错案例:** 1. 确认vsftpd服务状态: ```bash sudo systemctl restart vsftpd ``` 2. 修改配置文件`/etc/vsftpd.conf`: ```ini listen=YES listen_ipv6=NO ``` 3. 添加防火墙例外: ```bash sudo ufw allow 20:21/tcp ``` **SSH协议版本不匹配案例:** ```bash # 客户端调试模式查看协议协商过程 ssh -vvv user@host 2>&1 | grep "SSH protocol" # 服务端日志查看连接请求 tail -f /var/log/auth.log ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值