Я хочу получить доступ к своему веб-сайту, для которого требуется сначала базовое разрешение, а затем отправить параметры (ключевое слово поиска) на мою домашнюю страницу.Servlet не получает параметры после перенаправления (код ответа 302)
Мой код может передавать основное разрешение и получать текст ответа, однако я не могу получить результат поиска, но вместо этого получить код домашней страницы.
Таким образом, я напечатал параметры.size(), и он возвращает 0, поэтому я сомневаюсь, что метод перенаправления HttpClient не передает параметры после базовой авторизации.
После моего кода, который пытается получить результат поиска:
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("search_keyword", "test"));
params.add(new BasicNameValuePair("search_size", "50"));
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.setRedirectStrategy(new DefaultRedirectStrategy() {
public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context) throws ProtocolException {
boolean isRedirect=false;
try {
isRedirect = super.isRedirected(request, response, context);
} catch (ProtocolException e) {
throw e;
}
if (!isRedirect) {
int responseCode = response.getStatusLine().getStatusCode();
if (responseCode == 301 || responseCode == 302) {
return true;
}
}
return isRedirect;
}
});
String encoding = Base64Encoder.encode("admin:password");
HttpPost httppost = new HttpPost("http://127.0.0.1/MySystem/home");
httppost.setHeader("Authorization", "Basic " + encoding);
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
//Execute and get the response.
HttpResponse response = httpclient.execute(httppost);
int responseCode = response.getStatusLine().getStatusCode();
switch(responseCode) {
case HttpURLConnection.HTTP_OK:
HttpEntity entity = response.getEntity();
List<NameValuePair> parameters = new ArrayList<NameValuePair>(URLEncodedUtils.parse(entity));
System.out.println("parameters size: "+parameters.size());
for(NameValuePair p:parameters)
System.out.println("parameter: "+ p.getName() + p.getValue());
if(entity != null) {
responseText = EntityUtils.toString(entity);
System.out.println("responseText: ");
System.out.println(responseText);
}
break;
default:
throw new Exception("Failed to pass the basic authorization. Response code: "+responseCode);
}
Обновлено:
Следующее условие возвращает истину:
if (responseCode == 301 || responseCode == 302) {
return true;
}
вот как это предполагается перенаправление на работу .... обходные пути вы можете взглянуть на http://stackoverflow.com/questions/5405718/jsf- перенаправлять к URL-как-пост-не-как-получить – arajashe