1

我正在使用 HttpURLConnection 通过 POST 将数据发送到服务器。我设置标题然后获取输出流并写入一些字节然后关闭输出流。

我正在尝试从给定的 url 获取下一页的日程安排详细信息。但是有些我没有得到结果。如果您知道此代码中的任何问题,请帮助任何人。

我得到的第一页是错误的,而不是第二页。 “您选择的车站组合无效。请致电(718)217-5477联系长城旅游信息中心,并要求代表了解更多信息。”

     public static void main(String[] args) throws Exception {
        String url = "http://lirr42.mta.info";
        String cookie = retrieveCookies(url);
        String urlParameters = "FromStation=56&ToStation=8&RequestDate=08/24/2013&RequestTime=01:00&RequestAMPM=PM&sortBy=1&schedules=schedules";
        String page = postHttpPage(url + "/index.php", urlParameters, cookie);
        System.out.println(page);
        System.out.println();
    }

    public static String postHttpPage(String url, String urlParameters, String cookie) throws Exception {
        System.out.println("\nSending 'POST' request to URL : " + url);
        URL obj = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
        return postPage(conn, urlParameters, cookie);
    }

    private static String postPage(HttpURLConnection conn, String urlParameters, String cookie) throws Exception {
        conn.setRequestMethod("POST");
        conn.setRequestProperty("User-Agent", "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36");
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        conn.setRequestProperty("Content-Length", String.valueOf(urlParameters.getBytes().length));
        conn.setRequestProperty("Content-Language", "en-US");
        conn.setRequestProperty("Cookie", cookie);
        //conn.setInstanceFollowRedirects(true);
        // Send post request
        //conn.setDoInput(true);
        conn.setDoOutput(true);
        DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
        wr.writeBytes(urlParameters);
        //System.out.println("wr : " + wr.size());
        wr.flush();
        wr.close();

        StringBuffer response = new StringBuffer();
        int responseCode = conn.getResponseCode();
        System.out.println("Post parameters : " + urlParameters);
        System.out.println("Response Code : " + responseCode);

        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String inputLine;

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();

        return response.toString();
    }

    public static String retrieveCookies(String url) throws IOException{  
        URL obj = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) obj.openConnection();
        String cookies=conn.getHeaderField("Set-Cookie");  
        System.out.print("cookies: " + cookies);
        conn.disconnect();
        return cookies; 
    }  
4

3 回答 3

1

你错过了“?” 在 index.php 和参数之间。

于 2013-08-24T23:47:26.767 回答
0
HttpURLConnection.getResponseCode();

这种方法可能会对您有所帮助。
它强制连接真正建立连接。
可能你想使用 Apache HttpClient 让你的生活更轻松......

于 2015-04-13T06:34:11.593 回答
0

你应该做

String urlParameters = "FromStation=56&ToStation=8&RequestDate=08/24/2013&RequestTime=01:00&RequestAMPM=PM&sortBy=1&schedules=schedules";

进入

String urlParameters = "?FromStation=56&ToStation=8&RequestDate=08/24/2013&RequestTime=01:00&RequestAMPM=PM&sortBy=1&schedules=schedules";

于 2013-08-25T04:05:17.213 回答