几天没写博客了,最近看到有同学问http请求失败是怎么回事,于是想写一篇关于http请求失败各种原因的文章,废话不多说,写起来
一.访问服务器形式
1.向服务器请求数据,是域名访问还是IP访问
域名是否正确,IP地址是否正确,端口是否与服务器端匹配,这是由于不停的在开发环境、测试环境,或者生产环境来回切换导致的,比较容易排查
2.拼接字符是否有误
大小写字母,单词拼写,比如,succes,结果写成success,这个真有
二.URL地址格式
1.地址中是否缺少或者多余“/”,或者有其他不相干的多余字段。以get请求为例,正确的如下:
http://www.xxxx.com/search?key1=val1&key2=val2&key3=val3
一些错误的:
http:www.xxxx.com/search?key1=val1&key2=val2&key3=val3 (http:的后面少“//”,确实有这样的情况)
http:/www.xxxx.com/search?key1=val1&key2=val2&key3=val3 (http:/的后面少“/”)
2.包含中文的url地址
对包含中文的url地址,可能会出现浏览器请求成功,而客户端请求失败情况,这时,要查看是否对包含中文的URL进行编码
为什么浏览器可以请求成功?
浏览器内部默认对URL进行编码
为何客户端请求失败?
在编写http网络代码时,需要自己对URL进行编码处理,使用URLEncoder.encode(url,charset)。如果没有,URL地址很可能存在乱码,导致请求无法响应
很多网络请求框架,实际上其内部已经对URL地址进行了统一编码
比如:URL编码前,http://www.xxxx.com/search?scope=bbs&q=java语言
URL编码后,http://www.xxxx.com/search?scope=bbs&q=java%E8%AF%AD%E8%A8%80
三.请求参数
1.get请求,是在URL地址后,以“?”形式携带参数,如下:
简单点的,http://www.xxxx.com/search?key1=val1&key2=val2&key3=val3
复杂点的,http://www.xxxx.com/search?data={xxx} ({}中的内容由服务器端制定或者客服两端协商的,一般是json数据)
而下面这种形式,是错误的地址
http://www.xxxx.com/search??key1=val1&key2=val2&key3=val3 (多余一个“?”)
2.post请求时,可能涉及比较多的参数键值对,这时,查看是否漏掉某个参数,与服务器开发人员一一确认,不要嫌麻烦,一定要的
3.请求传参时,确认参数是否是必传值或者非必传值,或者有默认传值,参数值类型需要注意,比如需要传递整型,结果传递字符串
四.请求header是否要设置
1.header的键值是否正确,header的键,也就是名字,一般固定。而header值不确定,有固定值的尽量复制,对不固定值的,确保获取header值方法或者生成规则无误
2.多个网络请求使用同一header时,header值是否发生新的改变。比如一个网络请求时改变了header值,导致需要同一header的另一请求无法获得正确响应
3.多个网络请求有不同的header,是否只设置自身请求所需要的header,不设置不必要的header。这点,如果服务器有严格的header校验机制,一旦传递多余header,也会
4.导致请求失败,如果没有校验,侥幸成功响应,也最好不要多传无用的header
五.是否htts请求
需要证书的,添加必要的安全访问机制
好了,以上是实际开发可能遇到小问题,有些是粗心大意造成的,有些是代码不严谨留下的bug,但不可否认正是这些细节浪费了宝贵的时间,为此整理下,方便以后的开发调试。可能有些没有涉及到的问题,有想法或者有兴趣的小伙伴可以一起探讨下,后续我会更新上来..