2016-05-10 11 views
0

So.私の問題は非常に奇妙です(私にとって)。私はthisサイトにHTTPリクエストを送信するためにVolleyを使用しています。同じコードを使用して私は3種類の応答を得ます。 1つは奇妙な記号でいっぱいです(WRÄÕΨäxúD©zíÿ&ôD...)、2番目のページは自分のエラーページ、3番目のタイプは薬のページです。バレーリクエストは、デスクトップブラウザのページを訪問した後にのみ有効です。

欲しい、実際の結果ページを取得する唯一の方法は、奇妙なことです。私は薬のページにHTTP GETを送ります。これを行うだけで、タイプ1またはタイプ2のいずれかになりますが、しかし!私が最初にリンクをクリックすると(私はAndroid Studioでログオンしています)、デスクトップのブラウザでページに移動します(通常、いくつかの試行の後にエラーページが表示されることがあります)。 !

私は何度も何度も試してみましたが、実際にはこれがうまくいくようです。結果ビューに戻り、薬をもう一度クリックすることができるので、私は自分のアプリを再起動しません。私は薬をクリックして、いつもエラーページか奇妙な記号のいずれかで終わってしまうかもしれませんが、私のデスクトップ上のページを訪れてから、アプリでそれを再びクリックすると、常に望ましいページが生成されます。何が問題なの?クッキーについて何か?次のように

要求のためのコードは次のとおりです。

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); 
} 

答えて

0

私が答えを見つけたので、開いている問題を入力すると、かなりの治療であると思われます。単に薬のリストを要求すると、Set-Cookieヘッダーの内容がparseNetworkResponseになり、保存されます。その後、実際のページをリクエストすると、保存されたCookieにCookieパラメータが設定され、すべてが夢のように機能します。

関連する問題