2013-09-06 2 views
0

Я использую HttpClient version 4.2.5 для создания запроса сообщения для URL http://lirr42.mta.info/index.phpHttpClient ответа после редиректа получает неправильный ответ

Этого URL перенаправляет на schedules.php и, наконец, Я ожидаю результат со всей запланированной деталью синхронизации поезда.

После внедрения LaxRedirectStrategy Я получаю правильный код ответа как 200 вместо 302. Но проблема в том, что я не получаю ответа от schedules.php (перенаправленный URL), но получаю следующий ответ от index.php (1st url) только параметры, которые я отправил.

FromStation = 56 & ToStation = 8 & RequestDate = 09% 2F07% 2F2013 & RequestAMPM = PM & RequestTime = 01% 3A00 & SortBy = 1 & графики = графики

Пожалуйста, помогите мне решить вопрос.

public static void main(String[] args) throws Exception { 
    getPageHttpClient("http://lirr42.mta.info/index.php"); 
} 

public static String getPageHttpClient(String url) throws IOException { 
    DefaultHttpClient httpclient = new DefaultHttpClient(); 
    List<NameValuePair> formparams = new ArrayList<NameValuePair>(); 
    formparams.add(new BasicNameValuePair("FromStation", "56")); 
    formparams.add(new BasicNameValuePair("ToStation", "8")); 
    formparams.add(new BasicNameValuePair("RequestDate", "09/07/2013")); 
    formparams.add(new BasicNameValuePair("RequestAMPM", "PM")); 
    formparams.add(new BasicNameValuePair("RequestTime", "01:00")); 
    formparams.add(new BasicNameValuePair("sortBy", "1")); 
    formparams.add(new BasicNameValuePair("schedules", "schedules")); 
    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8"); 
    HttpPost httppost = new HttpPost(url); 
    httppost.setEntity(entity); 
    HttpContext localContext = new BasicHttpContext(); 
    httpclient.setRedirectStrategy(new LaxRedirectStrategy()); 


    HttpResponse response = httpclient.execute(httppost, localContext); 
    HttpUriRequest currentReq = (HttpUriRequest) localContext.getAttribute( 
      ExecutionContext.HTTP_REQUEST); 
    HttpHost currentHost = (HttpHost) localContext.getAttribute( 
      ExecutionContext.HTTP_TARGET_HOST); 
    String currentUrl = currentHost.toURI() + currentReq.getURI();   
    System.out.println(currentUrl); 
    System.out.println(response); 
    HttpEntity httpEntity = response.getEntity(); 
    String str = ""; 
    if (httpEntity != null) { 
     str = EntityUtils.toString(entity); 
     System.out.println(str); 
    } 
    return str; 
} 

Ответ Программы:

http://lirr42.mta.info/schedules.php 

HTTP/1.1 200 OK [Date: Fri, 06 Sep 2013 20:01:53 GMT, Server: Apache/2.2.3 (Linux/SUSE), X-Powered-By: PHP/5.2.5, Expires: 0, Cache-Control: no-cache, Pragma: no-cache, Content-Type: text/html, Content-Length: 15832, Age: 1, Via: 1.1 localhost.localdomain]  

FromStation=56&ToStation=8&RequestDate=09%2F07%2F2013&RequestAMPM=PM&RequestTime=01%3A00&sortBy=1&schedules=schedules 

ответ

0

Вы получаете правильный ответ, вы просто не печатает правильно.

Это потому, что вы находитесь EntityUtils.toString() по адресу entity вместо httpEntity.

Здесь

HttpEntity httpEntity = response.getEntity(); 
String str = ""; 
if (httpEntity != null) { 
    str = EntityUtils.toString(entity); 
    System.out.println(str); 
} 

вы передаете entity который

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8"); 

т.е.. параметры.

Использование

str = EntityUtils.toString(httpEntity); 

получить HttpResponse содержание.

+0

Спасибо за ваш ответ. Теперь он работает. – user2589193

+0

@ user2589193 Добро пожаловать. –

Смежные вопросы