我使用來自開源項目的TokenHttpRequest類:Moodle的 - 試圖得到令牌,接收故宮403
public String doHTTPRequest(String url){
String responseBody = "";
String token = "";
DefaultHttpClient httpClient = new DefaultHttpClient();
// Creating HTTP Post
HttpGet httpPost = new HttpGet(url);
try {
ResponseHandler<String> responseHandler=new BasicResponseHandler();
HttpContext context = new BasicHttpContext(); context.setAttribute(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0");
responseBody = httpClient.execute(httpPost, responseHandler, context);
JSONObject jObject = new JSONObject(responseBody);
token = jObject.getString("token");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// writing exception to log
e.printStackTrace();
} catch (IOException e) {
// writing exception to log
e.printStackTrace();
}
return token;
}
它運作良好,直到Moodle站點不能訪問即時更新到2.7。 現在httpClient.execute
行給出了錯誤禁止403。在瀏覽器中,url正常工作。
這就是我得到:
09-24 17:42:58.246: W/System.err(8820): org.apache.http.client.HttpResponseException: Forbidden
09-24 17:42:58.246: W/System.err(8820): at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:71)
09-24 17:42:58.246: W/System.err(8820): at org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59)
09-24 17:42:58.246: W/System.err(8820): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)
09-24 17:42:58.246: W/System.err(8820): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
09-24 17:42:58.246: W/System.err(8820): at moodle.android.moodle.helpers.TokenHttpRequest.doHTTPRequest(TokenHttpRequest.java:86)
09-24 17:42:58.246: W/System.err(8820): at ro.example.app.Login$2.run(Login.java:170)
09-24 17:42:58.246: W/System.err(8820): at java.lang.Thread.run(Thread.java:841)
也:
09-24 17:13:51.986: I/entity(2975): <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
09-24 17:13:51.986: I/entity(2975): <html><head>
09-24 17:13:51.986: I/entity(2975): <title>403 Forbidden</title>
09-24 17:13:51.986: I/entity(2975): </head><body>
09-24 17:13:51.986: I/entity(2975): <h1>Forbidden</h1>
09-24 17:13:51.986: I/entity(2975): <p>You don't have permission to access /login/token.php
09-24 17:13:51.986: I/entity(2975): on this server.</p>
09-24 17:13:51.986: I/entity(2975): </body></html>
當我試圖讓使用EntityUtils
任何實體有這個問題?
我已經檢查過,並且在external_services表中有短名稱;所有經過身份驗證的用戶都可以創建Web服務令牌並訪問REST API。所以我不知道除了可能的數據庫錯誤之外有什麼不對。 – 2016-12-09 13:45:35
你知道服務器響應你的請求的消息是什麼嗎? – Thpramos 2016-12-14 17:36:55
我不能複製它,以便能夠在這裏複製和粘貼它,但有一個問題是它將一些消息作爲對象而不是字符串返回,但是即使使用JSON.stringify也沒有特別照亮。我們認爲這可能是導致問題的Moodle服務器的新安全設置。 – 2016-12-16 11:49:50