2016-04-10 18 views
1

私はインターネットの助けを借りて問題を取り組んできましたが、私はわずかしか成功しませんでした。Android Volleyを使ってウェブサイトの検索バーで検索を実行する

問題:私は、VolleyライブラリでAndroidを使用して、2つのWebサイトから検索を実行しようとしています。問題のウェブサイトには、公開APIや検索の実行方法がわからないものはありません。私は、F12で開いているビューで、FirefoxでHTTPリクエストを検査しようとしました。

Website 1 HTTPSプロトコルを使用します。私はここからVnr番号を使って検索する必要があります。結果のページから私は薬の名前を解析します。

Website 2 HTTPプロトコルを使用します。ここから私は見つけられた薬の名前を使って検索し、(フィンランド語で)薬物の説明を得るでしょう。ウェブサイトの2のために

私は正常に結果ページのHTMLファイルを返す次のコードを、試してみました:

RequestQueue queue = Volley.newRequestQueue(this); 
    String url = "http://www.laakeinfo.fi/Medicine.aspx?m=758&d=2111337&i=ORION+PHARMA_RESILAR_RESILAR+oraaliliuos+3+mg/ml"; 

    StringRequest request = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      Log.d("HTTPTEST", "Response len: " + response.length()); 
      writeToFile(response); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.d("HTTPTEST", "Error: " + error.getMessage()); 
     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() throws AuthFailureError { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("i", "Resilar"); 
      return params; 
     } 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("Content-Type", "application/x-www-form-urlencoded"); 
      return params; 
     } 
    }; 

    queue.add(request); 

今これはまっすぐに私はそれをしたい場所にURLのポイントので、動作します。 URLを"http://www.laakeinfo.fi/Search.aspx"に変更し、getParams()でparams.put("Search1:txtSearch", "Resilar");(検索バーの内容)を使用すると、検索ページ自体が返されます。

私の質問は、私が可能にしようとしているものですか?私は知っているウェブのものであまりよくはないが、それはページが検索ロジックを非表示にし、すべてを検索を実行するのを困難にするようだ。それが本当に可能なら、私はどうすればそれについて行くことができますか?この試みではどんなヒントもありがたいです。

答えて

1

クイックアンサーははい、できます! ...それほど簡単ではないかもしれません:)

したがって、サーバーはリクエスト内の多くのものをチェックし、Accept-Language:ヘッダーのように「重要でない」データであってもサービスが返されるかどうかは問いません。あなたがそこに実験する必要があるので、これらは動作が変更される可能性があります

1)ヘッダ

Host: xn--lkeinfo-5waa.fi 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Firefox/45.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
DNT: 1 
Referer: http://xn--lkeinfo-5waa.fi/Search.aspx 
Cookie: ASP.NET_SessionId=mxj22y2oofzwcnmtcen50c45 

あなたがチェックして実験し、1人の発言しなければならない2つの主要なものを持っています。私は役に立つと思っている、あるいは理解していないと思うすべてを入れようとします。ここでは、「Cookie」と「Accept-Encoding」だけを削除します。

2)のparams

__EVENTTARGET:"Search1$lbSubmit" 
__EVENTARGUMENT:"" 
__VIEWSTATE:"/wEPDwUKMTc2NzY1NjI3Mg9kFgJmD2QWBAIDD2QWAgIFDxYCHgVjbGFzcwUGYWN0aXZlZAIFD2QWBGYPFgIfAAUJZnJtc2VhcmNoZAICDw8WBh4IQ3NzQ2xhc3MFA2J0bh4EVGV4dAUDSEFFHgRfIVNCAgJkZGQ2BqYJzINvRHYkGXr7+fwtg0L8cQ==" 
__VIEWSTATEGENERATOR:"BBBC20B8" 
__EVENTVALIDATION:"/wEWBALa8vLKCALQkcCMBAL43fjZDALY7fiNCoNRBovCyGbCM+mhYEACTRYyyeuF" 
Search1:txtSearch:"Resilar" 
Search1:hdLanguageId:"1" 

「がsearch1:txtSearchは」が、他の検索作るために明白なので、私はそれらのすべてを追加してそれらに1を除去するであろうし、それに参加を果たしている可能性があると思われます1つを試してみてください。

3)(発言)レスポンス302これは応答を返さず、むしろ1にリダイレクトする投稿要求です。あなたは、デバッグログを有効にし、この応答がボレーのエラーとみなされるので、ボレーが何を返すかを注意しなければなりません。それはHTTP Stack Volleyの使用によって処理されるかもしれませんが、どちらが設定されているかによって異なります。この場合、これはボレーには透明になりますが、それ以外の場合はボレーのカスタマイズを行うか、別のスタックを使用する必要があります。例えばアンドロイドは、URLConnectionで実際に使用されているネイティブクライアントとしてAndroidソースにOkHttpを採用して焼いています。 KitKatのような以前のバージョンでは、このリダイレクトは処理されませんでした。しかし、新しいリリースではそれを処理します。

+0

アドバイスと励ましに感謝します。私は実際にあなたが(ネットワークインスペクタを使用して発見された)あなたが言ったすべてを含めることによってそれを働かせ、Content-Typeを落としました。どういうわけかそれはすべてを台無しにしました。また、フォームなので、GETではなくPOSTを使用しなければなりません:) – Mootpoint

関連する問題