Как HTTP POST в Android Studio

Я пытаюсь выполнить HTTP POST в студии Android, используя with для получения значений. Я уже протестировал эту вещь в POSTMAN, но я не уверен, как набрать ее в студии Android. Пожалуйста, помогите мне создать HTTP POST-код для этого.

я делаю POST для

ml2.internalpositioning.com/track

с этим телом

{"username":"fyp","location":"location","group":"cowardlycrab","time":1501640084739,"wifi-fingerprint":[{"mac":"04:c5:a4:66:43:7k","rssi":-29}]}

person Luke Au    schedule 08.08.2017    source источник
comment
stackoverflow.com/questions/4457492/   -  person Héctor    schedule 08.08.2017
comment
@ Гектор, если я отвечу, куда мне положить тело, которое я использую в ПОЧТЛЕНЕ?   -  person Luke Au    schedule 08.08.2017
comment
Посмотрите на 2-й ответ. Когда мы связываем что-то, вы должны прочитать это целиком.   -  person takendarkk    schedule 08.08.2017
comment
Я не очень хорошо понимаю код для второго ответа, поэтому я сделал этот комментарий. Извините @csm_dev   -  person Luke Au    schedule 09.08.2017
comment
Вместо использования HttpPost вы можете использовать сетевые библиотеки, которые я объяснил в этой ссылке stackoverflow.com/a/45210317/1501864. Эти библиотеки сделают вашу работу проще и быстрее, чем http-пост.   -  person Jeevanandhan    schedule 10.08.2017


Ответы (2)


Я также пытаюсь отправить сообщение http. Я беру код сверху и меняю его для своего случая. Но, к сожалению, что-то не так.

Я хочу отправить дату на мой AV-ресивер Yamaha RX-A1080. Существует веб-интерфейс, и с его помощью я записываю команду HTTP POST в браузере Firefox. Браузер Firefox также предоставляет данные в компактном синтаксисе команды CURL, поэтому вы лучше видите данные команды HTTP POST в следующих строках:

(as a CURL Command)
curl 
'http://192.168.0.24/YamahaRemoteControl/ctrl' 
-H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0' 
-H 'Accept: */*' 
-H 'Accept-Language: de,en-US;q=0.7,en;q=0.3' 
--compressed 
-H 'Referer: http://192.168.0.24/Setup/' 
-H 'Content-Type: text/xml' 
-H 'Connection: keep-alive' 
--data '<?xml version="1.0" encoding="utf-8"?><YAMAHA_AV cmd="PUT"><System><Speaker_Preout><Pattern_1><PEQ><Manual_Data><Front_L><Band_7><Q>0.500</Q></Band_7></Front_L></Manual_Data></PEQ></Pattern_1></Speaker_Preout></System></YAMAHA_AV>'

я конвертирую это с помощью: https://curl.trillworks.com/#json и получаю это:

{
"url":"http://192.168.0.24/YamahaRemoteControl/ctrl",
"raw_url":"http://192.168.0.24/YamahaRemoteControl/ctrl",
"method":"post",
"headers":
{
   "User-Agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) 
    Gecko/20100101 Firefox/62.0",
   "Accept":"*/*",
   "Accept-Language":"de,en-US;q=0.7,en;q=0.3",
   "Referer":"http://192.168.0.24/Setup/",
   "Content-Type":"text/xml",
   "Connection":"keep-alive"
},
"data":
{
   "<?xml version":"\"1.0\" encoding=\"utf-8\"?><YAMAHA_AV cmd=\"PUT\"> 
<System><Speaker_Preout><Pattern_1><PEQ><Manual_Data><Front_L><Band_7><Q>0.500</Q></Band_7></Front_L></Manual_Data></PEQ></Pattern_1></Speaker_Preout></System></YAMAHA_AV>"
}
}

Код, который я написал, был следующим: (я не уверен, что в данных JSONObject много косых черт ???)

    // Gesamt JSON Object
    JSONObject post_dict = new JSONObject();

    try {
        post_dict.put("url", "http://192.168.0.24/YamahaRemoteControl/ctrl");
        post_dict.put("raw_url", "http://192.168.0.24/YamahaRemoteControl/ctrl");
        post_dict.put("method", "post");

        // headers - JSON Object ////////////////////////////////////////////

        JSONObject headers = new JSONObject();
        headers.put("User-Agent","Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0");
        headers.put("Accept","*/*");
        headers.put("Accept-Language","de,en-US;q=0.7,en;q=0.3");
        headers.put("Referer","http://192.168.0.24/Setup/");
        headers.put("Content-Type","text/xml");
        headers.put("Connection","keep-alive");

        post_dict.put("headers", headers);

        // data - JSON Object ////////////////////////////////////////////

        JSONObject data = new JSONObject();
        data.put("<?xml version","\\\"1.0\\\" encoding=\\\"utf-8\\\"?><YAMAHA_AV cmd=\\\"PUT\\\"><System><Speaker_Preout><Pattern_1><PEQ><Manual_Data><Front_L><Band_7><Gain><Val>-200</Val><Exp>1</Exp><Unit>dB</Unit></Gain></Band_7></Front_L></Manual_Data></PEQ></Pattern_1></Speaker_Preout></System></YAMAHA_AV>");

        post_dict.put("data", data);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    new YourAsyncTask().execute(String.valueOf(post_dict));

Может кто-нибудь сказать мне, что не так :-(

Для получения дополнительной информации о записанной команде, выполненной Firefox, вы можете увидеть следующие строки. (Но они похожи на команду CURL)

New Request
============
POST http://192.168.0.24/YamahaRemoteControl/ctrl

Request-Header:
===============
Host: 192.168.0.24
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0
Accept: */*  
        Accept-Language: de,en-US;q=0.7,en;q=0.3
        Accept-Encoding: gzip, deflate
        Referer: http://192.168.0.24/Setup/
        Content-Type: text/xml
        Content-Length: 272
        Connection: keep-alive

Request-Body:
=============
<?xml version="1.0" encoding="utf-8"?>
<YAMAHA_AV cmd="PUT">
    <System>
        <Speaker_Preout>
            <Pattern_1>
                <PEQ>
                    <Manual_Data>
                        <Front_L>
                            <Band_7>

                                <Gain>
                                    <Val>-10</Val>
                                    <Exp>1</Exp>
                                    <Unit>dB</Unit>
                                </Gain>
                         or
                                <Freq>1.26 kHz</Freq>
                         or
                                <Q>0.500</Q>

                            </Band_7>
                        </Front_L>
                    </Manual_Data>
                </PEQ>
            </Pattern_1>
        </Speaker_Preout>
    </System>
</YAMAHA_AV>
person Oli    schedule 09.04.2019

Моя ошибка заключалась в том, что мои данные не являются объектом json. Мне нужно только отправить «данные» в виде строки. Тогда работает ;-)

person Oli    schedule 07.07.2019