0

postメソッドでhtmlページを取得したいと思います。最初に HttpClient を使用しますが、適切な応答が得られません。次に を追加HeaderRefererます。うまく機能しますが、遅すぎます。そこで、URLConnection を使用する予定です。また、 に追加RefererしますがHeader、今回は必要なものが返されません。

Http クライアント:

httpclient = new DefaultHttpClient();  
            HttpPost httppost = new HttpPost(WhutGlobal.URL_HEADER_STR + "xscj_gc.aspx?xh=" + WhutGlobal.USER_ID + "&xm=" + WhutGlobal.USER_NAME + "&gnmkdm=N121605");
            try {
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                httppost.setHeader("Referer", WhutGlobal.URL_HEADER_STR + "xscj_gc.aspx?xh=" + WhutGlobal.USER_ID + "&xm=" + WhutGlobal.USER_NAME + "&gnmkdm=N121605");
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                InputStream is = entity.getContent();
                BufferedInputStream bis = new BufferedInputStream(is);
                byte  bytearray[] = new  byte[800000];
                 int current= -1;
                 int i=0;  
                 while((current=bis.read())!=-1) {
                     bytearray[i] =(byte) current;
                      i++;
               }
              html = new String (bytearray,"GB2312");
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
            } catch (IOException e) {
                // TODO Auto-generated catch block
            }

URL接続:

 URL url = new URL(WhutGlobal.URL_HEADER_STR + "xscj_gc.aspx?xh=" + WhutGlobal.USER_ID + "&xm=" + WhutGlobal.USER_NAME + "&gnmkdm=N121605");
         HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
         urlConnection.setDoOutput(true);
         urlConnection.setDoInput(true);
         urlConnection.setRequestMethod("POST");
         urlConnection.setRequestProperty("Connection", "Keep-Alive");
         urlConnection.setRequestProperty("Accept-Encoding", "gzip");
         urlConnection.setRequestProperty("Referer", WhutGlobal.URL_HEADER_STR + "xscj_gc.aspx?xh=" + WhutGlobal.USER_ID + "&xm=" + WhutGlobal.USER_NAME + "&gnmkdm=N121605");
         DataOutputStream wr = new DataOutputStream (
                   urlConnection.getOutputStream ());
         wr.writeBytes (urlParameters);
         wr.flush ();
         wr.close ();
4

1 に答える 1

2

HttpClientとhtml の取得方法の速度に大きな違いはないはずURLConnectionです...接続速度 (3G/Wifi) に依存する可能性がありますが、

以下を使用しているため、HttpPost ソリューションの動作が遅くなる可能性があります。

while((current=bis.read())!=-1) ...

代わりに、このSTUPID スニペット(この場合、バイトごとの読み取りは実際には効率的ではありません) を使用します。

html = EntityUtils.toString(entity, "GB2312")

HttpURLConnection について ... urlParameters で何を送信するかによって異なります ...DataOutputStreamこの場合は使用しないでください

于 2012-11-29T15:09:28.853 に答える