CRef<epost::CEPostResult> CEPost_Request::GetEPostResult(void) { CObjectIStream* is = GetObjectIStream(); _ASSERT(is); CRef<epost::CEPostResult> res(new epost::CEPostResult); *is >> *res; Disconnect(); // Save context data if ( res->IsSetHistory() ) { GetConnContext()->SetWebEnv(res->GetHistory().GetWebEnv()); GetConnContext()->SetQueryKey(res->GetHistory().GetQueryKey()); } return res; }
void CEUtils_Request::Connect(void) { string url = GetBaseURL() + GetScriptName(); string body = GetQueryString(); STimeout timeout_value; const STimeout* timeout = g_CTimeoutToSTimeout(GetConnContext()->GetTimeout(), timeout_value); if ( m_Method == eHttp_Post ) { m_Stream.reset(new CConn_HttpStream( url, NULL, "Content-type: application/x-www-form-urlencoded", NULL, NULL, NULL, NULL, fHTTP_AutoReconnect, timeout)); *m_Stream << body; } else { m_Stream.reset(new CConn_HttpStream( url + "?" + body, fHTTP_AutoReconnect, timeout)); } }
string CEUtils_Request::GetQueryString(void) const { string args; if ( !m_Database.empty() ) { args = "db=" + m_Database; } const string& webenv = GetConnContext()->GetWebEnv(); if ( !webenv.empty() ) { if ( !args.empty() ) { args += "&"; } args += "WebEnv=" + NStr::URLEncode(webenv, NStr::eUrlEnc_ProcessMarkChars); } string qk = GetQueryKey(); if ( !qk.empty() ) { if ( !args.empty() ) { args += "&"; } args += "query_key=" + qk; } const string& tool = GetConnContext()->GetTool(); if ( !tool.empty() ) { if ( !args.empty() ) { args += "&"; } args += "tool=" + NStr::URLEncode(tool, NStr::eUrlEnc_ProcessMarkChars); } const string& email = GetConnContext()->GetEmail(); if ( !email.empty() ) { if ( !args.empty() ) { args += "&"; } args += "email=" + NStr::URLEncode(email, NStr::eUrlEnc_ProcessMarkChars); } ITERATE(TRequestArgs, it, m_Args) { if ( !args.empty() ) { args += "&"; } args += it->first + "=" + NStr::URLEncode(it->second, NStr::eUrlEnc_ProcessMarkChars); } return args; }
CRef<esearch::CESearchResult> CESearch_Request::GetESearchResult(void) { CObjectIStream* is = GetObjectIStream(); _ASSERT(is); CRef<esearch::CESearchResult> res(new esearch::CESearchResult); *is >> *res; Disconnect(); // Save context data bool have_content = res->GetData().IsInfo() && res->GetData().GetInfo().IsSetContent(); if ( have_content ) { if ( res->GetData().GetInfo().GetContent().IsSetWebEnv() ) { GetConnContext()->SetWebEnv( res->GetData().GetInfo().GetContent().GetWebEnv()); } if ( res->GetData().GetInfo().GetContent().IsSetQueryKey() ) { GetConnContext()->SetQueryKey( res->GetData().GetInfo().GetContent().GetQueryKey()); } } return res; }
const string& CEUtils_Request::GetQueryKey(void) const { return m_QueryKey.empty() ? GetConnContext()->GetQueryKey() : m_QueryKey; }