2012-03-07 58 views
2

我需要在發送POST數據後從URL讀取HTML響應。我已經有了以下兩個功能,但我不知道如何組合它們,以便發送POST數據並獲得響應。通過BlackBerry發送POST數據後獲得HTML響應

該函數獲得一個標準的HTML響應:

public static String getDataFromUrl(String url) throws IOException { 
    System.out.println("------------FULL URL = " + url + " ------------"); 
    StringBuffer b = new StringBuffer(); 
    InputStream is = null; 
    HttpConnection c = null; 

    long len = 0; 
    int ch = 0; 
    c = (HttpConnection) Connector.open(url); 
    is = c.openInputStream(); 
    len = c.getLength(); 
    if (len != -1) { 
     // Read exactly Content-Length bytes 
     for (int i = 0; i < len; i++) 
      if ((ch = is.read()) != -1) { 
       b.append((char) ch); 
      } 
    } else { 
     // Read until the connection is closed. 
     while ((ch = is.read()) != -1) { 
      len = is.available(); 
      b.append((char) ch); 
     } 
    } 

    is.close(); 
    c.close(); 
    return b.toString(); 
} 

這個功能發送POST數據到一個URL:

void postViaHttpConnection(String url) throws IOException { 
    HttpConnection c = null; 
    InputStream is = null; 
    OutputStream os = null; 
    int rc; 

    try { 
     c = (HttpConnection) Connector.open(url); 

     // Set the request method and headers 
     c.setRequestMethod(HttpConnection.POST); 
     c.setRequestProperty("If-Modified-Since", "29 Oct 1999 19:43:31 GMT"); 
     c.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.0"); 
     c.setRequestProperty("Content-Language", "en-US"); 

     // Getting the output stream may flush the headers 
     os = c.openOutputStream(); 
     os.write("LIST games\n".getBytes()); 
     os.flush(); // Optional, getResponseCode will flush 

     // Getting the response code will open the connection, 
     // send the request, and read the HTTP response headers. 
     // The headers are stored until requested. 
     rc = c.getResponseCode(); 
     if (rc != HttpConnection.HTTP_OK) { 
      throw new IOException("HTTP response code: " + rc); 
     } 

     is = c.openInputStream(); 

     // Get the ContentType 
     String type = c.getType(); 
     processType(type); 

     // Get the length and process the data 
     int len = (int) c.getLength(); 
     if (len > 0) { 
      int actual = 0; 
      int bytesread = 0; 
      byte[] data = new byte[len]; 
      while ((bytesread != len) && (actual != -1)) { 
       actual = is.read(data, bytesread, len - bytesread); 
       bytesread += actual; 
      } 
      process(data); 
     } else { 
      int ch; 
      while ((ch = is.read()) != -1) { 
       process((byte) ch); 
      } 
     } 
    } catch (ClassCastException e) { 
     throw new IllegalArgumentException("Not an HTTP URL"); 
    } finally { 
     if (is != null) 
      is.close(); 
     if (os != null) 
      os.close(); 
     if (c != null) 
      c.close(); 
    } 
} 

所以,我需要知道如何把它們結合在一起,這樣我可以得到響應後發送POST數據。

+1

是(緊急!)我不知道的一些新技術?老實說,描述中的這些東西根本不會幫你。如果你想要緊急的幫助有一個專業的,你付出,站在旁邊。 – rwilliams 2012-03-07 04:27:59

+0

對不起,我很傻。這只是我忽略了我的程序中的這個問題,我需要找到一種方法來儘快解決它。 – Chro 2012-03-07 04:37:08

回答

1

試試這個下面的代碼,讓我知道螞蟻的問題

注:URL擴展是很重要的(我在這裏使用的WiFi僅例: 「界面=無線」)

import java.io.InputStream; 
import java.io.OutputStream; 

import javax.microedition.io.Connector; 
import javax.microedition.io.HttpConnection; 

import net.rim.blackberry.api.browser.URLEncodedPostData; 
import net.rim.device.api.io.http.HttpProtocolConstants; 

public class HttpPostSample { 
    HttpConnection hc = null; 
    StringBuffer stringBuffer = new StringBuffer(); 
    InputStream inputStream; 

    public HttpPostSample(String url) { 
     try{ 
      hc = (HttpConnection)Connector.open(url+";interface=wifi");//you have to use connection extension ";interface=wifi" this is only for wifi 
      URLEncodedPostData oPostData = new URLEncodedPostData(URLEncodedPostData.DEFAULT_CHARSET, false); 
      //These are your appending values and tags 
      oPostData.append("property_id","value"); 
      oPostData.append("property_name","value"); 
      oPostData.append("category","value"); 
      oPostData.append("address","value"); 
      oPostData.append("country","value"); 
      hc.setRequestMethod(HttpConnection.POST); 
      hc.setRequestProperty(HttpProtocolConstants.HEADER_CONTENT_TYPE, oPostData.getContentType()); 
      byte [] postBytes = oPostData.getBytes(); 
      hc.setRequestProperty(HttpProtocolConstants.HEADER_CONTENT_LENGTH, Integer.toString(postBytes.length)); 
      OutputStream strmOut = hc.openOutputStream(); 
      strmOut.write(postBytes); 
      strmOut.flush(); 
      strmOut.close(); 

      String returnMessage = hc.getResponseMessage(); 
      System.out.println("============"+returnMessage); 
      if(hc.getResponseCode()==HttpConnection.HTTP_OK) 
      { 
       inputStream = hc.openInputStream(); 
       int c; 
       while((c=inputStream.read())!=-1) 
       { 
        stringBuffer.append((char)c); 
       } 
       System.out.println(">>>>>>>>>>>>>>>>>"+stringBuffer.toString()); 
       parseResults(stringBuffer.toString()); 

      }else{ 
       parseResults("ERROR"); 
      } 


     }catch (Exception e) { 
      // TODO: handle exception 
     } 
    } 
    private void parseResults(String response) 
    { 
     if(response.equalsIgnoreCase("ERROR")) 
     { 
      System.out.println("Error in Connection please check your internet and Connection extension"); 
     }else{ 
      System.out.println(response); 
     } 
    } 

} 

您可以撥打上面的功能

HttpPostSample post=new HttpPostSample(url); 

你可以看到在控制檯parseResults方法

輸出