2013-08-24 77 views
1

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

我想从给定的网址获取下一页计划详情。但一些我没有得到结果。如果您知道此代码中的任何问题,请帮助任何人。

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

 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; 
    } 
+1

你会得到什么结果?你应该发布。 – BlackHatSamurai

+0

我得到第一页错误,而不是第二页。 **“您选择的车站组合无效,请致电(718)217-5477联系LIRR旅游信息中心,并索取代表以获取更多信息。”** – user2589193

回答

1

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

+0

这是后期要求,所以我们不需要放在 ”?”。但我仍然尝试这种方式并给出同样的错误。感谢名单。 – user2589193

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";

+0

这就是我所建议的,但没有奏效。 我试着Fiddler Web调试器(v2.4.5.0)并把请求,它工作正常。我不知道java代码中有什么问题。 – user2589193

0
HttpURLConnection.getResponseCode(); 

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