Blackberry отправить запрос HTTPPost - PullRequest
3 голосов
/ 15 февраля 2011

Я занимаюсь разработкой и приложением для BlackBerry, и мне нужно отправить Http Post Request на мой сервер.Я использую симулятор для тестирования своего приложения и нашел этот код для отправки запроса:

http://vasudevkamath.techfiz.com/general/posting-data-via-http-from-blackberry/

Но я не могу заставить его работать, потому что он не работаетв этой строке:

int rc = _httpConnection.getResponseCode();

Есть идеи?

спасибо

Ответы [ 5 ]

2 голосов
/ 23 февраля 2011

Вот пример кода о том, как отправить запрос POST:

HttpConnection c = (HttpConnection) Connector.open(url, Connector.READ_WRITE);
c.setRequestMethod(HttpConnection.POST);
OutputStream os = c.openOutputStream();
os.write(request.getBytes("UTF-8"));
os.flush();
os.close();
InputStream is = c.openInputStream();

Просто убедитесь, что вы используете этот код в отдельном потоке.

2 голосов
/ 24 февраля 2011
public static ResponseBean sendRequestAndReceiveResponse(String method, String absoluteURL, String bodyData, boolean readResponseBody) 
throws IOException
{
    ResponseBean responseBean = new ResponseBean();
    HttpConnection httpConnection = null;

    try
    {

        String formattedURL = absoluteURL + "deviceside=true;interface=wifi"; // If you are using WiFi
        //String formattedURL = absoluteURL + "deviceside=false"; // If you are using BES
        //String formattedURL = absoluteURL + "deviceside=true"; // If you are using TCP

        if(DeviceInfo.isSimulator()) // if you are using simulator
            formattedURL = absoluteURL;

        httpConnection = (HttpConnection) Connector.open(formattedURL);

        httpConnection.setRequestMethod(method);

        if (bodyData != null && bodyData.length() > 0)
        {                               
            OutputStream os = httpConnection.openOutputStream();
            os.write(bodyData.getBytes("UTF-8"));
        }           

        int responseCode = httpConnection.getResponseCode();
        responseBean.setResponseCode(responseCode);

        if (readResponseBody)
        {
            responseBean.setBodyData(readBodyData(httpConnection));
        }
    }
    catch (IOException ex)
    {                       
        System.out.println("!!!!!!!!!!!!!!! IOException in NetworkUtil::sendRequestAndReceiveResponse(): " + ex);
        throw ex;
    }
    catch(Exception ex)
    {                       
        System.out.println("!!!!!!!!!!!!!!! Exception in NetworkUtil::sendRequestAndReceiveResponse(): " + ex);
        throw new IOException(ex.toString());
    }
    finally
    {
        if (httpConnection != null)
            httpConnection.close();
    }

    return responseBean;
}

public static StringBuffer readBodyData(HttpConnection httpConnection) throws UnsupportedEncodingException, IOException
{   
    if(httpConnection == null)
        return null;

    StringBuffer bodyData = new StringBuffer(256);                          
    InputStream inputStream = httpConnection.openDataInputStream();

    byte[] data = new byte[256];
    int len = 0;
    int size = 0;

    while ( -1 != (len = inputStream.read(data)) )
    {
        bodyData.append(new String(data, 0, len,"UTF-8"));
        size += len;
    }

    if (inputStream != null)
    {
        inputStream.close();            
    }

    return bodyData;
}
1 голос
/ 09 августа 2012

Я знаю, что этот вопрос довольно старый, и OP, вероятно, уже решил его, но я только что столкнулся с той же проблемой и сумел ее исправить!

Вам нужно добавить ;deviceside=trueна ваш URL.

Так, например, ваш URL изменится с "http://example.com/directory/submitpost.php" на "http://example.com/directory/submitpost.php;deviceside=true".

Я нашел это здесь: http://supportforums.blackberry.com/t5/Java-Development/Different-ways-to-make-an-HTTP-or-socket-connection/ta-p/445879

Мой POST-запрос истекал через 3 минуты, когда у меня его не было (см. Мой комментарий ), но он работает нормально с добавленным к URL-адресу.

Я бы также рекомендовал использовать ConnectionFactory.Вот мой код:

Network.httpPost("http://example.com/directory/submitpost.php;deviceside=true", paramNamesArray, paramValsArray)
public static void httpPost(String urlStr, String[] paramName, String[] paramVal) throws Exception {
        ConnectionFactory conFactory = new ConnectionFactory();
        conFactory.setTimeLimit(1000);
        HttpConnection conn = (HttpConnection) conFactory.getConnection(urlStr).getConnection();
        conn.setRequestMethod(HttpConnection.POST);
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < paramName.length; i++) {
            sb.append(paramName[i]);
            sb.append("=");
            sb.append(paramVal[i]);
            sb.append("&");
        }
        byte[] postData = sb.toString().getBytes("UTF-8");
        conn.setRequestProperty("Content-Length",new Integer(postData.length).toString());

        OutputStream out = conn.openOutputStream();
        out.write(postData);
        //out.flush();      //Throws an Exception for some reason/Doesn't do anything anyways
        out.close();

        //This writes to our connection and waits for a response 
        if (conn.getResponseCode() != 200) {
            throw new Exception(conn.getResponseMessage());
        }
}
0 голосов
/ 14 декабря 2012

Вот как вы добавляете параметры, полный ответ здесь:

StringBuffer postData = new StringBuffer();

                    httpConn = (HttpConnection) Connector.open("https://surveys2.kenexa.com/feedbacksurveyapi/login?");
                    httpConn.setRequestMethod(HttpConnection.POST);

                    postData.append("username="+username);
                    postData.append("&password="+pass);
                    postData.append("&projectcode="+projectid);
                    String encodedData = postData.toString();

                    httpConn.setRequestProperty("Content-Language", "en-US");
                    httpConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
                    httpConn.setRequestProperty("Content-Length",(new Integer(encodedData.length())).toString());
                    byte[] postDataByte = postData.toString().getBytes("UTF-8");

                    OutputStream out = httpConn.openOutputStream(); 
                    out.write(postDataByte);
                    out.close();

                    httpConn.getResponseCode();
0 голосов
/ 17 февраля 2011

Не уверен насчет сайта, который вы разместили, но я успешно использовал образец кода ConnectionFactory, предоставленный на сайте blackberry.

http://supportforums.blackberry.com/t5/Java-Development/Sample-Code-Using-the-ConnectionFactory-class-in-a-BrowserField/ta-p/532860

Только убедитесь, что не вызываете соединение в EventThread.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...