Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос начинающего о HTTP POST, как правильно отправлять данные post-oм 
:(
    Опции темы
nangel
  Дата 25.2.2008, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



Уважаемый форумчане, уж помогите начинающему, как же все таки верно отправить данные методом POST( или GET главное отправить на www.xxx.ru/test.php) 
Перечитал форум нашел куски кодов, но все равно нужно же как то прописывать. Например HttpConnection con = null; и тому подобное... Как сделать соединение?

Суть вот в чем есть програмка в ней нужно организовать регистрацию пользователя. Отправляем Номер телефона Номер машины и Имя
Код

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.DataOutputStream;
import javax.microedition.lcdui.ItemStateListener;
import javax.microedition.lcdui.Item.*;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.io.*;
import javax.microedition.io.ConnectionNotFoundException;
import java.io.InputStream;
import java.io.ByteArrayOutputStream;



public class MentOFF extends MIDlet implements CommandListener {

    private static final Command CMD_EXIT = new Command("Выход", Command.EXIT, 1);
    private static final Command CMD_BACK = new Command("Назад", Command.BACK, 1);
    private static final Command CMD_OK = new Command("ОК", Command.OK, 3);
    private static final Command CMD_OK2 = new Command("Зарегистрировать", Command.OK, 4);
    private static final Command CMD_OK1 = new Command("Сдать", Command.OK, 5);
    private Display display;
    private List mainList;
    private List exclusiveList;
    private Form implicitList;
    private Form multipleList;
    private Form registration;
    private Form enter;
    private boolean firstTime;
    private String InputStream;
    HttpConnection con = null;
    HttpConnection os;



    private TextField data;
    private TextField phone;
    private TextField myname;
    private TextField carn;

    public MentOFF() {
        display = Display.getDisplay(this);

        String[] stringArray = { "Порт" };
        Image[] imageArray = null;

        exclusiveList = new List("", Choice.EXCLUSIVE, stringArray, imageArray);
        exclusiveList.addCommand(CMD_BACK);
        exclusiveList.addCommand(CMD_EXIT);
    exclusiveList.addCommand(CMD_OK1);
        exclusiveList.setCommandListener(this);

        implicitList = new Form("Заголовок");
    implicitList.append("АПР");
        implicitList.addCommand(CMD_BACK);
        implicitList.setCommandListener(this);

        
    multipleList = new Form("Ограничение");
    multipleList.append("???");
        multipleList.addCommand(CMD_BACK);
        multipleList.setCommandListener(this);


    registration = new Form("Регистрация");
    registration.append("Введите имя:");
    registration.append(myname = new TextField("", "", 15, TextField.ANY));
    registration.append("Номер телефона:");
        registration.append(phone = new TextField("", "+7", 12, TextField.PHONENUMBER));
    registration.append("Цифры номера машины:");
    registration.append(carn = new TextField("", "", 3, TextField.PHONENUMBER));
    registration.addCommand(CMD_OK2);
        registration.addCommand(CMD_BACK);
        registration.addCommand(CMD_EXIT);
        registration.setCommandListener(this);
        firstTime = true;

    enter = new Form("Вход");
    enter.append("Введите Имя:");
        enter.addCommand(CMD_BACK);
        enter.addCommand(CMD_EXIT);
        enter.setCommandListener(this);
        firstTime = true;
    }


private void makeHttpPost(){
String TelNum = phone.getString();
String CarNum = carn.getString();
String MyNameg = myname.getString();
String text = ("Начало регистрации. Пожалуйста подождите");
            Alert a = new Alert("URL", text, null, AlertType.INFO);
            display.setCurrent(a);
        
con=(HttpConnection) Connector.open("http://domen.com/index.php");
con.setRequestMethod(HttpConnection.GET);
con.setRequestProperty("Accept","*/*");
con.setRequestProperty("Connection", "close");
int code=con.getResponseCode();
is=con.openInputStream();
}

    protected void startApp() {
        if (firstTime) {
            Image[] imageArray = null;

            try {
                Image icon = Image.createImage("/Icon.png");

                imageArray = new Image[] { icon, icon, icon, icon, icon };
            } catch (java.io.IOException err) {

            }

            String[] stringArray = { "Меню", "Меню", "Меню", "Регистрация", "Вход" };
            mainList = new List("Choose type", Choice.IMPLICIT, stringArray, imageArray);
            mainList.addCommand(CMD_EXIT);
            mainList.setCommandListener(this);
            display.setCurrent(mainList);
            firstTime = false;
        
}
    }

    protected void destroyApp(boolean unconditional) {
    }

    protected void pauseApp() {
    }

    public void commandAction(Command c, Displayable d) {
        if (d.equals(mainList)) {
            // in the main list
            if (c == List.SELECT_COMMAND) {
                if (d.equals(mainList)) {
                    switch (((List)d).getSelectedIndex()) {
                    case 0:
                        display.setCurrent(exclusiveList);

                        break;

                case 1:
                        display.setCurrent(implicitList);

                        break;

                case 2:
                        display.setCurrent(multipleList);

                        break;
        case 3:
                        display.setCurrent(registration);

                        break;
        case 4:
                        display.setCurrent(enter);

                        break;
                    }
                }
            }
        } else {
            // in one of the sub-lists
            if (c == CMD_BACK) {
                display.setCurrent(mainList);
            }
        }
if (c == CMD_EXIT) {
            destroyApp(false);
             notifyDestroyed();
        }
if (c == CMD_OK2) {
makeHttpPost();
        }

    }
}





Собственно все пока работает, кроме отправки данных. Уж если кто сталкивался, объясните новичку.
PM MAIL   Вверх
W0LF
Дата 25.2.2008, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Такс. Блин. Эта тема стока раз подымалась!
Наверно перенесу ее в ФАК
Цитата

HttpSender.java

Код

package src.io;

/**
 * @author Alexander Lonsky
 */


import javax.microedition.io.Connector;
import javax.microedition.io.ConnectionNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.InputStream;
import java.io.ByteArrayOutputStream;
import javax.microedition.io.HttpConnection;

public class HttpSender {
    private static HttpSender httpSender = null;

    private HttpSender() {
    }

    public static synchronized HttpSender getInstance() {
        if (httpSender == null) {
            httpSender = new HttpSender();
        }
        return httpSender;
    }

    /**
     * -
     *
     * @param url
     * @param dataOutput if dataOutput == null - get request, otherwise - post request
     * @return response data
     */
    public synchronized byte[] send(String url, byte[] dataOutput, String boundary) throws IOException {
        if (url == null) {
            return null;
        }
        HttpConnection hCon;
        ByteArrayOutputStream bStrm = new ByteArrayOutputStream();
        try {
            hCon = (HttpConnection) Connector.open(url);
            if (dataOutput != null) {
                hCon.setRequestMethod(HttpConnection.POST);
                hCon.setRequestProperty("Content-Type",
                        "multipart/form-data; boundary=" + boundary);
                hCon.setRequestProperty("Content-Length", String.valueOf(dataOutput.length));
                OutputStream os;
                os = hCon.openOutputStream();
                os.write(dataOutput);
                os.close();
            }
        } catch (ConnectionNotFoundException cnfe) {
            throw new IOException("connection not found exception");
        } catch (IOException ioe) {
            throw new IOException("openURL ioe exception");
        } catch (ClassCastException cce) {
            throw new IOException("Bad url exception");
        } catch (SecurityException se) {
            throw new IOException("Permissions denied exception");
        } catch (NullPointerException npe) {            
            throw new IOException("NullPointer exception");
        }
        if (hCon.getResponseCode() == HttpConnection.HTTP_OK) {
            InputStream is;
            is = hCon.openInputStream();
            int ch;
            try {
                while ((ch = is.read()) != -1) {
                    bStrm.write(ch);
                }
                bStrm.close();
                is.close();
                hCon.close();
            } catch (IOException ioe) {
                System.out.println(getClass().getName() + " : can't read from stream");
            }
        } else {            
            throw new IOException(String.valueOf(hCon.getResponseCode())
                    + " : " + hCon.getResponseMessage());
        }
        return bStrm.toByteArray();
    }

}


Пример использования
Цитата

NetManager.java

Код

package src.managers;

import src.io.HttpSender;
import java.util.Hashtable;
import java.util.Enumeration;
import java.io.IOException;

/**
 * @author: Alexander Lonsky
 */
public class NetManager {
     private static String className = "NetManager";
    /**
     * Creates Entity-Body of post request
     *
     * @param boundary
     * @param parameters Hashtable of parameters ("key" - name of parameter,
     *                   "value" - value of parameter)
     * @return <description>
     */
    private static byte[] getMultiPart(String boundary, Hashtable parameters) {
        String crlf = "\r\n";
        StringBuffer sb = new StringBuffer();
        Enumeration e = parameters.keys();
        while (e.hasMoreElements()) {
            String nameOfParameter = (String) e.nextElement();
            String valueOfParameter = (String) parameters.get(nameOfParameter);
            sb.append("--" + boundary + crlf);
            sb.append("Content-Disposition: form-data; name=\"" + nameOfParameter + "\""
                    + crlf);
            sb.append(crlf);
            sb.append("" + valueOfParameter + crlf);
        }
        sb.append("--" + boundary + "--" + crlf);
        return sb.toString().getBytes();
    }

    

    /**
     * Builds and sends Login request to server
     * @param login
     * @param password
     * @throws IOException
     */
    public static void buildLoginRequest(String login, String password) throws IOException {
        String boundary = "1B" + System.currentTimeMillis();
        Hashtable parameters = new Hashtable();
        //Это параметры, которые должна получить серверная сторона.
        parameters.put("type", "login");
        parameters.put("username", login);
        parameters.put("password", password);        
        byte[] data = getMultiPart(boundary, parameters);
        sendRequest(data, boundary);
    }

    /**
     *
     * @param data
     * @param boundary
     * @throws IOException
     */
    private static void sendRequest(byte[] data, String boundary)
            throws IOException {
        byte[] responseData;
        try {
            responseData = HttpSender.getInstance().send(Constants.URL, data, boundary);
        } catch (IOException ioe) {
            Logger.logError(className, "sendRequestParseResponse "
                    + ioe.getMessage());
            throw new IOException(ioe.getMessage());
        }
        //а тут уже парсим responseData - поток байт, полученный с сервера ну или можно вернуть его return а там уже с ним работать
       // в случае, если не пост запрос, то data передаем как null
    }



}




--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
nangel
Дата 25.2.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



Выполнил второй пример вылезло куча ошибок.. 

В первом:
Unable to create MIDlet HttpSender
java.lang.IllegalAccessException
    at com.sun.midp.midlet.MIDletState.createMIDlet(+34)
    at com.sun.midp.midlet.Selector.run(+22)


Коды не изминял. Делал как есть.

Добавлено через 3 минуты и 27 секунд
Если не трудно, попробуй в мой код внести некоторые изменения, чтобы регистрационные данные по нажатию Зарегистрировать (поля там есть) инфа отправлялась на сервак, к примеру на http://www.blabla.ru/index.php

Заранее СПАСИБО!
И за коды отдельное СПАСИБО!
PM MAIL   Вверх
eugine_s
Дата 25.2.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Цитата(nangel @  25.2.2008,  14:35 Найти цитируемый пост)
В первом:
Unable to create MIDlet HttpSender
java.lang.IllegalAccessException


Что за ошибка это? Почему не попробывать самому разобраться с ошибкой?
Ты пытаешь получить доступ к чему-то к чему у тебя нет доступа, т.е. ты пытаешься получить доступ к методу, который объявлен как private.

В классе HttpSender конструктор объявлен как private, а для получения экземпляра класса есть метод HttpSender.getInstance()

Код

    private static HttpSender httpSender = null;
    private HttpSender() {
    }
    public static synchronized HttpSender getInstance() {
        if (httpSender == null) {
            httpSender = new HttpSender();
        }
        reurn httpSender;
    }


Делается это для того, чтобы у класса был только один экземпляр.


PM MAIL   Вверх
nangel
Дата 27.2.2008, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



Спасибо.. Все работает.
PM MAIL   Вверх
Pepod2007
Дата 15.10.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.10.2008

Репутация: нет
Всего: нет



возникает проблема..когда я открываю соединение 
Код

 hCon = (HttpConnection) Connector.open("89.237.203.4:9999");


у меня почему то все висит и не движется с места...не подскажите в чем проблема?
может быть из за того  что я не хост прописываю а ip??


Это сообщение отредактировал(а) Pepod2007 - 15.10.2008, 13:26
PM MAIL   Вверх
eugine_s
Дата 15.10.2008, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Цитата(Pepod2007 @  15.10.2008,  13:24 Найти цитируемый пост)
у меня почему то все висит и не движется с места...не подскажите в чем проблема?


Я думаю с вероятностью 99.9% проблема в том, что ты не запускаешь отдельный поток, а все выполняешь в главном потоке.

PM MAIL   Вверх
Выхухоль
Дата 6.12.2008, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 85
Регистрация: 9.10.2008
Где: Ташкент

Репутация: 2
Всего: 2



eugine_s, да тут почти был прав, спасибо за совет... кста все таки из за токо что схему забыл прописать в УРЛ.. smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0902 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.