2016-05-10 8 views
0

So. Mein Problem ist extrem seltsam (für mich). Ich verwende Volley, um HTTP-Anfragen an die this Website zu senden. Mit dem gleichen Code bekomme ich 3 Arten von Antworten. Einer ist voller seltsamer Symbole (WRÄÕΨäxúD © zíÿ & ôD ...), der zweite ist die eigene Fehlerseite der Seite und der dritte Typ ist der, den ich will: die Seite des Medikaments.Volley Anfrage funktioniert nur nach dem Besuch der Seite auf dem Desktop-Browser

Der einzige Weg, wie ich die gewünschte, tatsächliche Ergebnisseite bekommen habe, ist das komische Ding. Ich sende ein HTTP GET zur Medizinseite. Dies führt entweder zu Typ 1 oder Typ 2. ABER! Wenn ich zum ersten Mal auf den Link klicke (ich logge ihn in Android Studio ein) und mit dem Desktop meines Browsers auf die Seite gehe (nach ein paar Versuchen erscheint die Fehlerseite manchmal) und DANN klicke wieder auf den Link in meiner App, es wird geladen !

Ich habe es viele Male versucht und es scheint wirklich so funktioniert es. Ich starte meine App nicht neu, weil ich zu meiner Ergebnisansicht zurückkehren und erneut auf das Medikament klicken kann. Ich kann das Medikament zigmal klicken, immer mit der Fehlerseite oder seltsamen Symbolen enden, aber die Seite auf meinem Desktop zu besuchen und dann in der App wieder zu klicken, produziert immer die gewünschte Seite. Was könnte das Problem sein? Etwas über Kekse?

Der Code für die Anforderung lautet wie folgt:

public static void requestWithUrl(final HTTPRequestListener listener, final String url) { 
    Log.d("WUT", "URL: " + url); 

    final StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      Log.d("WUT", "Got url response"); 

      try { 
       String encoding = "UTF-8"; 
       String line; 
       InputStream stream = new ByteArrayInputStream(response.getBytes(encoding)); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(stream, encoding)); 
       while ((line = reader.readLine()) != null) { 
        Log.d("WUT", "LINE: " + line); 
       } 
      } catch (Exception e) { 
       listener.onHTTPFailure(); 
      } 

      listener.onFoundSingle("Title", response, true); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.d("WUT", "Got url error"); 
      listener.onHTTPFailure(); 
     } 
    }) { 

     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> params = new HashMap<>(); 
      params.put("Content-Type", "text/html; charset=utf-8"); 
      return params; 
     } 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      Map<String, String> params = new HashMap<>(); 
      params.put("Host", "www.laakeinfo.fi"); 
      params.put("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0"); 
      params.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 
      params.put("Accept-Language", "fi-FI,fi;q=0.8,en-US;q=0.5,en;q=0.3"); 
      params.put("Accept-Encoding", "gzip, deflate"); 
      params.put("Referer", "http://www.laakeinfo.fi/Search.aspx"); 
      return params; 
     } 
    }; 

    request.setTag(TAG); 

    queue.add(request); 
} 

Antwort

0

Es scheint, das Problem offen ist durchaus therapeutische eingeben, da ich die Antwort gefunden. Einfach, wenn ich zuerst die Liste der Medikamente anfrage, bekomme ich den Set-Cookie Header-Inhalt in parseNetworkResponse und speichere es. Wenn ich dann die tatsächliche Seite anfordere, setze ich den Parameter Cookie auf den gespeicherten Cookie und alles funktioniert wie ein Traum.

Verwandte Themen