0

ログインしているとは見なされないため、応答として常にログインページが表示されます。これは私の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
4

1 に答える 1

0

Web サービス呼び出しを呼び出していたときに、存在してはいけないパラメーターが nameValuePairs にあったため、クラッシュしていました。

于 2012-12-20T09:17:08.100 に答える