2012-03-07 6 views
2

POSTデータを送信した後、URLからHTML応答を読み取る必要があります。私はすでに以下の2つの機能を持っていますが、それらを組み合わせて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(); 
} 

この関数は、URLにPOSTデータを送信します。

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

+0

すみません、私のことはばかげていました。プログラムでこの問題を見落としてしまったので、すぐに修正する方法を見つける必要があります。 – Chro

答えて

1

この次のコードを試してみて、私はアリの問題

注知らせ:のURL拡張子が重要である(私は無線LANのみの例のために使用しています。ここ:「;インターフェース=無線LANを」)

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); 
     } 
    } 

} 

をあなたは

コンソールparseResults方法で出力を見ることができます

HttpPostSample post=new HttpPostSample(url); 

としての機能の上に呼び出すことができます

関連する問題