我在Android应用程序中工作,需要通过POST请求从Web api获取令牌,我使用的是OkHttp库版本2.3.0但奇怪的是post方法正在执行GET请求,因此我获得405状态代码这是服务器不允许响应的方法。
这是我的代码。
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
public String executePOST(){
OkHttpClient client = new OkHttpClient();
.
.
.
.
String url = API_URL + "/oauth/access_token/";
String strResponse = null;
RequestBody body = RequestBody.create(JSON, jsonBody);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Response response;
try {
response = client.newCall(request).execute();
strResponse = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return strResponse;
}
当我调试代码时,响应对象具有此内容......
知道这有什么问题吗?这个可能的工作是什么?对你的帮助表示感谢!感谢...
答案 0 :(得分:2)
当我将POST发送到 http ://而不是 https ://时,我遇到了这种问题。
我想,它会自动将我重定向到https://,其中方法类型丢失了。
答案 1 :(得分:1)
请注意HTTP响应的priorResponse()
成员。您的POST
请求正在被重定向,并且Web服务器拒绝重定向的请求。无论网络服务器正在进行重定向,都应该返回307或308(保留请求方法),而不是当前返回的重定向响应代码。
答案 2 :(得分:1)
我的问题是网址中有一个额外的斜杠,就像以前一样
mysite.com/api/v1/question/attend /
在删除了如下所示的斜杠后可以正常工作
mysite.com/api/v1/question/attend
答案 3 :(得分:0)
您需要在构建请求时设置呼叫帖子,如下所示:
String postBody = "postBody\n";
Request request = new Request.Builder()
.url("https://api.github.com/markdown/raw")
.post(RequestBody.create(MEDIA_TYPE_MARKDOWN, postBody))
.build();
但我明白了,你正在发帖...也许media_type应该是不同的。
public static final MediaType MEDIA_TYPE_MARKDOWN
= MediaType.parse("text/x-markdown; charset=utf-8");
但你可能需要这个:
public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8");