我无法在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
答案 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();
<强>更新强>
只需将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