iOS 网络请求问题报错,"Request failed: internal server error (500)",起因,解决方法

一、起因

在开发时候用AFNetworking做网络请求时出现了一个问题,"Request failed: internal server error (500)",我一开就去百度查了一下,网上很多人都说500 是服务器的问题,但后来我去问我们这边的安卓他又可以正常请求到数据,所以我怀疑可能是代码的问题。

下面这个是请求时的报错

error: Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: internal server error (500)" UserInfo={com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x17042e480> { URL: http:xxx.xxx.xxx } { status code: 500, headers {
    Connection = "keep-alive";
    "Content-Length" = 456;
    "Content-Type" = "text/html;charset=UTF-8";
    Date = "Tue, 07 Aug 2018 06:31:06 GMT";
} }, NSErrorFailingURLKey=http:xxx.xxx.xxx, com.alamofire.serialization.response.error.data=<0d0a2020 20200d0a 3c21444f 43545950 45206874 6d6c2050 55424c49 4320222d 2f2f5733 432f2f44 54442048 544d4c20 342e3031 20547261 6e736974 696f6e61 6c2f2f45 4e222022 68747470 3a2f2f77 77772e77 332e6f72 672f5452 2f68746d 6c342f6c 6f6f7365 2e647464 223e0d0a 3c68746d 6c3e0d0a 3c686561 643e0d0a 3c6d6574 61206874 74702d65 71756976 3d22436f 6e74656e 742d5479 70652220 636f6e74 656e743d 22746578 742f6874 6d6c3b20 63686172 7365743d 5554462d 38223e0d 0a3c7469 746c653e 4572726f 72353030 3c2f7469 746c653e 0d0a3c2f 68656164 3e0d0a3c 626f6479 3e0d0a09 3c62722f 3e0d0a09 3c62722f 3e0d0a09 3c62722f 3e0d0a09 093c6365 6e746572 3e0d0a09 093c7072 653e0d0a 4e6f7465 3a204465 61722075 7365722c 20796f75 20686176 65206e6f 74206c6f 67696e20 746f2074 68652073 79737465 6d2c2073 6b697020 6c6f6769 6e207061 6765206c 6f67696e 2e2e203c 62723e0d 0a3c6120 68726566 3d222e2f 6c6f6769 6e2e646f 22207461 72676574 3d225f74 6f70223e 4c6f6769 6e205061 67653c2f 613e0d0a 09093c2f 7072653e 0d0a0d0a 093c2f63 656e7465 723e0d0a 3c2f626f 64793e0d 0a3c2f68 746d6c3e>, NSLocalizedDescription=Request failed: internal server error (500)}

二、问题

经过查找,我定位到问题在序列化器上

requestSerializer

requestSerializerAFNetworking 参数编码的序列化器,它把输入的参数编码后才往服务器发送,有三种编码格式:

AFHTTPRequestSerializer:第一种是普通的http的编码格式,转成
userName=xiaoming&password=12345678&time=20180807

AFJSONRequestSerializer:第二种也是json编码格式,会转成{"userName":"xiaoming","password":"12345678","time":"20180807"}

AFPropertyListRequestSerializer:pislt格式

responseSerializer 是反编码的参数序列化器,主要把你接受到的数据先反编码一遍才输出

requestSerializerresponseSerializer 根据需求来自己设置,一般你跟后台沟通,了解接口接收和输出的格式,然后设置好就可以了

三、总结

上面的那个问题报错我最后改了一下requestSerializer就可以正常获取数据了

manager.requestSerializer = [AFHTTPRequestSerializer serializer];

ps: 其实这一切都是后台的坑,公司有好几个后台开发,不同功能有时是不同的后台给我提供的接口,然后他们有自己的开发习惯,有些接口接收json格式返回json格式,有些接口接收普通的http的编码格式返回json格式,有些接口接收普通的http的编码格式返回Image格式,我一开始用的是统一的方法,现在要根据不同的接口一一去配置,就是坑...

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • AFNetworking网络框架在iOS开发中的霸主地位已经根深蒂固,本篇将基于3.2.1版本对框架的几个核心模块...
    Lotheve阅读 8,616评论 1 26
  • 1、登录(文本输入、按钮交互、基于网络的交互) 2、刷新界面:(表视图) 1>小部分应用程序数据来源于本地 2>更...
    炙冰阅读 4,253评论 0 1
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 10,667评论 1 23
  • 1.谈谈 tableview 的重用机制。 为什么要“重用”?iPhone 重用机制是为了实现大量数据显示而采用的...
    大王叫我来巡山_Cong阅读 5,849评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,797评论 19 139