2017-02-20 19 views
0

私はウェブサイトからデータを取得しようとしています:http://www.wecare4air.co.uk/air-quality-data/brookgate-cb-1/ 私はチャールズを使ってFirefoxがデータを取得するためにサイトに送信する投稿要求とヘッダーを取得し、 Apacheライブラリを使用して同じもの(同じ投稿、同じヘッダ)。Java - Apache Post Requestが返されない完全なページ

しかし、私のJavaコードは、結果のWebサイトの定型句のみを取得します。つまり、結果のないサイトを取得します。レスポンスのステータスコードは2000ですが、Firefoxがロードするサイトのサイズは20kBではなく8kBです。

何が原因なのでしょうか?ここで

は(原因設定必要なパラメータの数に大規模な)コードです:

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.HttpClients; 
import org.apache.http.message.BasicNameValuePair; 

import java.io.*; 
import java.util.ArrayList; 
import java.util.List; 

final static String WEBSITE_URL = "http://www.wecare4air.co.uk/non- aurn-results"; 

private static String dateToStationRoadPostRequestFormat(String date) { 
    return String.format("%s/%s/%s", date.substring(8, 10), date.substring(5, 7), date.substring(0, 4)); 
} 

private static String timeToStationRoadPostRequestFormat(String time) { 
    return time.substring(0,5); 
} 

/** 
*@param date is of format YYYY-MM-DD 
*@param time is of format HH:00:00 
*/ 
private static List<NameValuePair> preparePostRequestParams (String date, String time) { 
    date = dateToStationRoadPostRequestFormat(date); 
    time = timeToStationRoadPostRequestFormat(time); 

    List<NameValuePair> params = new ArrayList<NameValuePair>(2); 
    params.add(new BasicNameValuePair("station-id", "221")); 
    params.add(new BasicNameValuePair("station_name", "Brookgate CB1")); 
    params.add(new BasicNameValuePair("output_type", "grid")); 
    params.add(new BasicNameValuePair("report_length", "daily")); 
    params.add(new BasicNameValuePair("checkboxes", "all")); 
    params.add(new BasicNameValuePair("monitors[]", "5")); 
    params.add(new BasicNameValuePair("monitors[]", "4")); 
    params.add(new BasicNameValuePair("monitors[]", "6")); 
    params.add(new BasicNameValuePair("monitors[]", "119")); 
    params.add(new BasicNameValuePair("monitors[]", "48")); 
    params.add(new BasicNameValuePair("monitors[]", "11")); 
    params.add(new BasicNameValuePair("monitors[]", "13")); 
    params.add(new BasicNameValuePair("monitors[]", "12")); 
    params.add(new BasicNameValuePair("monitors[]", "161")); 
    params.add(new BasicNameValuePair("monitors[]", "162")); 
    params.add(new BasicNameValuePair("monitors[]", "10")); 
    params.add(new BasicNameValuePair("monitors[]", "48")); 
    params.add(new BasicNameValuePair("monitors[]", "11")); 
    params.add(new BasicNameValuePair("monitors[]", "13")); 
    params.add(new BasicNameValuePair("monitors[]", "161")); 
    params.add(new BasicNameValuePair("monitors[]", "162")); 
    params.add(new BasicNameValuePair("monitors[]", "94")); 
    params.add(new BasicNameValuePair("monitors[]", "93")); 
    params.add(new BasicNameValuePair("monitors[]", "90")); 

    //Customised values 
    params.add(new BasicNameValuePair("start_date", date)); 
    params.add(new BasicNameValuePair("start_time", time)); 
    params.add(new BasicNameValuePair("end_date", date)); 
    params.add(new BasicNameValuePair("end_time", time)); 

    params.add(new BasicNameValuePair("result_type", "AVG")); 
    params.add(new BasicNameValuePair("time_base", "1")); 
    params.add(new BasicNameValuePair("singlebutton", "")); 

    return params; 
} 
private static HttpPost prepareHttpPost(String date, String time) throws UnsupportedEncodingException { 
    HttpPost httppost = new HttpPost(WEBSITE_URL); 
    // Request parameters and other properties. 
    List<NameValuePair> params = preparePostRequestParams(date, time); 


    httppost.setEntity(new UrlEncodedFormEntity(params)); 
    httppost.setHeader("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:51.0) Gecko/20100101 Firefox/51.0"); 
    httppost.setHeader("Referer", "http://www.wecare4air.co.uk/air-quality-data/brookgate-cb-1/"); 
    return httppost; 
} 

public static void getGrid(String date, String time) throws IOException { 
    HttpClient httpclient = HttpClients.createDefault(); 
    HttpPost httppost = prepareHttpPost(date, time); 

    //Execute and get the response. 
    HttpResponse response = httpclient.execute(httppost); 
    System.out.println("Response Code : " + response.getStatusLine().getStatusCode()); 
    HttpEntity entity = response.getEntity(); 


    System.out.printf("Response length is %d\n", entity.getContentLength()); 

    if (entity != null) { 
     BufferedReader instreamReader = new BufferedReader(new InputStreamReader(entity.getContent())); 
     StringBuffer result = new StringBuffer(); 
     String line; 
     try { 
      while ((line = instreamReader.readLine()) != null) { 
       result.append(line+"\n"); 
      } 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
     finally { 
      instreamReader.close(); 
      System.out.println("Response here!!:\n\n" + result); 
     } 
    } 
} 
public static void main (String[] args) { 
    try { 
     getGrid("2017-01-01", "23:00:00"); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

}

答えて

0

あなたは上記のウェブサイトのURLのタイプミスをしたかもしれません!ページがAJAXリクエストによって読み込まれていないかどうかチェックしましたか?

+0

これはコメントです。必要な担当者がいるまで待ってください。回答をコメントとして投稿してシステムを乱用しないでください。 –

+0

URLは、Firefoxがリクエストを送信したURLと同じである必要があります。 私はajaxをhttp://stackoverflow.com/questions/1820927/request-monitoring-in-chrome に記載されているようにチェックしました。実行されているjsスクリプトがいくつかありますが、Ajaxリクエストは行われていないようです。これは正しい軌道かもしれないと思う。 – SquattingSlavInTracksuit

関連する問題