ログインしているとは見なされないため、応答として常にログインページが表示されます。これは私のPOSTメソッドのコードです(ログインと他のWebサービスの両方で呼び出します)。
protected WebEntity sendPOST(WebServiceTask.InputParam param) throws Exception {
WebEntity result = null;
httppost = new HttpPost(param.url);
if ((param.nameValuePairs != null) && !param.nameValuePairs.isEmpty()) {
httppost.setEntity(new UrlEncodedFormEntity(param.nameValuePairs, "UTF-8"));
LogService.log("sendPOST", "======params========" + param.nameValuePairs);
}
System.out.println("----blabla_session : "+blabla_session);
if (blabla_session != null) {
CookieStore cookieStore = httpclient.getCookieStore();
BasicClientCookie cookie = new BasicClientCookie("blabla_session", blabla_session);
cookie.setDomain("http://blbla.kz");
cookieStore.addCookie(cookie);
httpclient.setCookieStore(cookieStore);
httppost.setHeader("Set-Cookie", blabla_session);
}
LogService.log("WEB-SERVER-CLIENT POST : ", httppost.getURI().toString());
HttpResponse response = httpclient.execute(httppost);
if (response.getStatusLine().getStatusCode() >= 400) {
String maybeThereIsSomeExtraMessageInBody = "";
try {
maybeThereIsSomeExtraMessageInBody = (String) getResponseStream(response, response.getEntity(), String.class);
} catch (Exception e) {
e.printStackTrace();
// DO NOTHING
}
return new WebEntity(response.getStatusLine().getStatusCode(), response.getStatusLine().getReasonPhrase() + "\n" + maybeThereIsSomeExtraMessageInBody);
}
Header cp = response.getFirstHeader("Set-Cookie");
if(cp!=null){
HeaderElement[] he = cp.getElements();
for (int i = 0; i < he.length; i++) {
if(he[i].getName().equalsIgnoreCase("blabla_session")){
blabla_session = he[i].getValue();
break;
}
}
}
HttpEntity responseEntity = response.getEntity();
if (responseEntity != null) {
if (result != null) {
result.success = true;
} else {
result = new WebEntity(false);
}
}
return result;
}
これで、私が最初に行うWS呼び出しはログインWSです。この時点では、blabla_sessionはnullであるため、コードの一部は開始されません。2番目のWS呼び出しから、blabla_session(静的)が必要なsession_codeで開始されます。これは、セッションから取得します。これが、WS呼び出しで送信するために、Cookieを作成する必要があるコードの(blabla_session!= null)部分に入る理由です。
これは、Webサービスに使用するコードです。
r = requests.post('http://blabla.kz/api/login/',data={'username':'USERNAME','password':'123'})
rr = requests.get('http://blabla.kz/api/validate_coupon/bsdfsdfsd/', cookies=r.cookies)
rr.text