2013-08-01 1 views
0

Я новичок и работаю в приложении для Android. Мое приложение отлично работало, пока хост не установил, что его веб-страница перенаправляется на другую страницу. Теперь я получаю код HTML страницыHttp Get метод возвращаемого объекта перемещен

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<HTML> 
<HEAD> 
<TITLE>Moved</TITLE> 
</HEAD> 
<BODY> 
<H1>Object Moved</H1> this document may be found <a href="some url">here</a> 
</BODY> 
</HTML> 

Пробовал conn.setInstanceFollowRedirects (ложь); но все еще бесполезно. если я использую метод GET, я получаю это, но при использовании метода POST я получаю null с большим количеством пробелов. Пожалуйста помоги.

enter code here 

Вот мой код в doinbackground()

protected Void doInBackground(String... param) { 
try 
{ 
HttpClient httpclient = new DefaultHttpClient(){ 
@Override 
    protected RedirectHandler createRedirectHandler() { 
    return new DefaultRedirectHandler(){ 
    @Override 
    public boolean isRedirectRequested(HttpResponse response,  HttpContext context) { 

           rep="httpclient redirect"; 
           return false; 
          } 
         }; 
        } 
       }; 
        HttpGet httppost = new HttpGet(param[0]); 
        httpclient.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS, false); 
        httppost.getParams().setParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, Boolean.FALSE); 
ResponseHandler<String> responseHandler=new BasicResponseHandler(); 
        String responseBody = httpclient.execute(httppost, responseHandler); 
        rep+=responseBody; 


      } 
catch (Exception e) 
      { 
       if(e.getMessage()==null) 
        rep+="No response from server"; 
       else 
       rep+="Error: " + e.getMessage(); 
      } 
}`enter code here` 
+1

Вы должны установить '' setInstanceFollowRedirects' к true' т.е. 'conn.setInstanceFollowRedirects (истину);', если вы хотите следовать переадресации. –

+0

Извините, но я не хочу следить за перенаправлением. я фактически использовал ответ, который был задан конкретной страницей на хосте. –

ответ

0

Итак ... Что на ваш вопрос? Если хост переместил файл, мы не можем что-то исправить .. вам просто нужно перенаправить на перемещенный ресурс и получить информацию оттуда.

+0

на самом деле они запустили любую вещь, с которой я поговорил с ними, и они настроили перенаправление на их домашнюю страницу. Все страницы и папки этого веб-сайта по-прежнему являются их и на работе, которые можно использовать, когда я пытаюсь связаться с www.somewebsite .com/mypage.aspx? somevar = 12 (который раньше работал нормально) в браузере, который он перемещается, но я не хочу, чтобы он перемещался в моем приложении. –

0

Раньше я сталкивался с этой ситуацией, если я правильно понял, что вам нужно. Ситуация заключается в том, что вы запрашиваете какой-либо URL-адрес, и ответ HTTP 302 временно перемещается или сортируется, но вам нужна информация из этого ответа.

попробовать этот

final HttpParams params = new BasicHttpParams(); 
    HttpClientParams.setRedirecting(params, false); 


    // Create No Redirect HttpClient 
    HttpClient httpClient = new DefaultHttpClient(){ 

     @Override 
     protected RedirectHandler createRedirectHandler() { 
      return new DefaultRedirectHandler(){ 
       @Override 
       public boolean isRedirectRequested(HttpResponse response, HttpContext context) { 
        Log.d(TAG, "HttpClient Redirect"); 
        return false; 
       } 
      }; 
     } 
    }; 

    CookieStore cookieStore = new BasicCookieStore(); 
    httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore); 


    // Prepare Login Request 



    HttpPost postLogin = new HttpPost(URL_LOGIN); 

    if(username == null || password == null){ 
     throw new LoginFailException(); 
    } 


    String params1 = URLEncoder.encode("member[email]","utf-8")+"="+URLEncoder.encode(username,"utf-8"); 
    String params2 = "&"+URLEncoder.encode("member[crypted_password]","utf-8")+"="+URLEncoder.encode(password,"utf-8"); 
    String params3 = "&"+URLEncoder.encode("action","utf-8")+"="+URLEncoder.encode("login","utf-8"); 
    String params4 = "&"+URLEncoder.encode("redirect","utf-8")+"="; 




    postLogin.setEntity(new StringEntity(params1+params2+params3+params4)); 
    postLogin.addHeader("Content-Type", "application/x-www-form-urlencoded"); 
    postLogin.addHeader("Accept-Encoding", "gzip"); 
    postLogin.addHeader("User-Agent", "Dalvik/1.4.0 (Linux; U; Android 2.3.7; Full Android on x86 Emulator Build/GINGERBREAD)"); 



    HttpResponse respLogin = httpClient.execute(postLogin, httpContext); 

от реализации этого вы можете прочитать данные из ответа перенаправления

+0

Я пробовал код выше, но теперь он приходит в улов и показывает «Перемещенное постоянное» исключение после долгой паузы. должен ли я поделиться каким-то кодом, поэтому я редактирую свой пост, пожалуйста, проверьте и помогите –

+0

это все мой код возвращает URL-адрес 302. из этой реализации я могу получить результат от ответа 302 Перемещен навсегда FYI сверху, я отредактировал – Nantaphop

+0

Наконец-то я наконец смог убедить мою мою хостинговую компанию изменить навигацию с ** серверной стороны ** на клиентскую сторону и теперь мой код работает нормально. Я предполагаю, что их нет никакого официального способа остановить навигацию на стороне сервера от приложения Android. –

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

  • Нет связанных вопросов^_^