Поля формы Unirest неправильно отправляются из Jython

Я использую реализацию java Unirest (1.4.7) из кода Jython (2.7) и Java (7).

Я столкнулся с проблемой при отправке http-запросов из кода Jython:

Вот код Jython:

import com.mashape.unirest.http.Unirest as Unirest;
r = Unirest.post("http://localhost:5002/test").field(u"this", u"makes").field(u"no", u"sense").asString();

Это дает мне следующее тело запроса, когда я печатаю его на стороне сервера:

no=sense&this=m&this=a&this=k&this=e&this=s

Первое «поле» всегда «разбросано» по телу запроса, как если бы это была коллекция.

Теперь, если я сделаю то же самое на Java:

try {
    Unirest.post("http://localhost:5002/test")
    .field("this", "makes")
    .field("no", "sense")
    .asString();
} catch (UnirestException e) {
    e.printStackTrace();
}

Я получаю это тело на сервере, которое я и ожидал:

no=sense&this=makes

Заголовки в обоих случаях одинаковы (за исключением, очевидно, длины содержимого тела), единственное, что меняется, — это тело.

Что не так с моим кодом Jython?


person Khopa    schedule 10.03.2016    source источник


Ответы (1)


Я считаю, что строки jython каким-то образом рассматриваются Unirest как коллекции в первый раз, когда я передаю их как поле. Я не совсем уверен, почему, но, используя эту интуицию, мне удалось найти обходной путь для моего кода Jython.

Явное превращение Jython String в Java String, что обычно не требуется, насколько мне известно, решило мою проблему.

import com.mashape.unirest.http.Unirest as Unirest;
import java.lang.String as jstr

Unirest.post("http://localhost:5002/test").field(jstr(u"this"), jstr(u"makes")).field(jstr(u"no"), jstr(u"sense")).asString();

Теперь выдает ожидаемое тело запроса:

no=sense&this=makes
person Khopa    schedule 10.03.2016