OkHTTP Post错误405但是curl命令正常
作者:互联网
问题描述
最近我尝试在服务上用OkHttp向"IP_Address/playlists"
发送post请求的时候,收到了错误405。错误信息为:
192.168.0.105 - - [19/Jul/2018 17:23:37] "POST //playlists HTTP/1.1" 405 -
来自服务器的响应为:
Allow: HEAD, GET, OPTIONS Content-Length: 178 Server: Werkzeug/0.14.1 Python/3.7.0 Date: Fri, 20 Jul 2018 01:57:56 GMT <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <title>405 Method Not Allowed</title> <h1>Method Not Allowed</h1> <p>The method is not allowed for the requested URL.</p>
但是我用curl命令发送相同的httppost请求,却得到的是成功的响应。
在对Okhttp做了多次正确性验证后,实在还是一头雾水
问题解决
在对响应结果做打印追踪问题时,找到了它要访问的完整URL是"http://IP_Address_Another//playlists"(有两个“/”,这就是为什么它得到错误的原因),于是将要访问的url直接改成"http://IP_Address_Another/playlists"就好了
问题分析
在网上查找405问题期间,发现了有以下几个结论:
- POST类请求出现302跳转,302跳转的时候会更改请求方法此时服务端可能不能识别,则报405错误。
- 请求服务端直接校验Method,对应Response Header中会有Allow =GET的信息字样。
- 负载均衡或者Web Server上做转发的时候,修改了请求Method导致后端无法识别。
对于本次问题进行分析,考虑到应该是第一种,用curl -v试验了一下,果然中间走了一层3xx。考虑到可能是3xx重定向到的host末尾可能多加了"/",导致最后拼接访问的时候,是两个斜线,导致了问题。
标签:playlists,请求,curl,405,Address,OkHTTP,Post,Method 来源: https://www.cnblogs.com/fnlingnzb-learner/p/16697868.html