Okhttp PUT请求nginx服务器不允许

时间:2016-08-25 20:32:14

标签: android nginx okhttp3

  • 我无法在nginx网络服务器上使用PUT请求访问json,但是可以访问带有帖子请求的相同请求!

    String json = "{ \"key\": \"" + value + "\" }";
    
    OkHttpClient  client  = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .build();
    
    client.newCall(new Request.Builder()
                            .url(url)
                            .put(RequestBody.create(JSON, json))
                            .build()
                    ).execute();
    
    
    public static final MediaType JSON
                = MediaType.parse("application/json; charset=utf-8");
    

更新

curl -i -H "Accept: application/json" -H "token: token" -X PUT -d '{ "uid": 123, "name": "Name",                         }' http://api.myserver.com
  • 使用 NOT ALLOWED
  • 回复
  

HTTP / 1.1 405不允许服务器:nginx / 1.4.6(Ubuntu)内容类型:   application / json Transfer-Encoding:chunked Connection:keep-alive   X-Powered-By:PHP / 5.5.9-1ubuntu4.11缓存控制:无缓存日期:星期四,   2016年8月25日21:37:02 GMT

1 个答案:

答案 0 :(得分:0)

经过一番搜索,我找到了理由:

  • 您需要使用HttpDavModule Stackoverflow编译nginx。

  • 但我可以通过添加"_METHOD=PUT","PUT"从客户端修复我的问题 到我的json。

  • 并将PUT请求转换为POST

  • 标题(" X-HTTP-Method-Override"," PUT")。

    String json = "{ \"_METHOD=PUT\":\"PUT\",\"key\": \"value\"\" }";
    
    
    client.newCall(new Request.Builder()
                    .url(url)
                    .post(RequestBody.create(JSON, json))
                    .Header("X-HTTP-Method-Override", "PUT")
                    .build()
            ).execute();
    

<强>更新

  • 无需添加&#34; _METHOD = PUT&#34;,&#34; PUT&#34;身体上的json。
  • 只需将PUT请求转换为POST&amp;添加标题(&#34; X-HTTP-Method-Override&#34;,&#34; PUT&#34;)使其正常工作。

    curl -i -H "Accept: application/json" -H "-HTTP-Method-Override: PUT" -H "token: token" -X POST -d '{ "uid": 123, "name": "Name"}' http://api.myserver.com
    
  

HTTP / 1.1 200 OK服务器:nginx / 1.4.6(Ubuntu)内容类型:   application / json Transfer-Encoding:chunked Connection:keep-alive   X-Powered-By:PHP / 5.5.9-1ubuntu4.11缓存控制:无缓存日期:星期四,   2016年8月25日21:37:02 GMT