未从 Jython 正确发送 Unirest 表单字段
Unirest form fields not being sent correctly from Jython
我正在使用来自 Jython (2.7) 和 Java (7) 代码的 java Unirest (1.4.7) 实现。
我在从 Jython 代码发送 http 请求时遇到了问题:
这是 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();
当我在服务器端打印它时,这给了我以下请求 body:
no=sense&this=m&this=a&this=k&this=e&this=s
请求 body 中的第一个 "field" 始终是 "scattered",就好像它是 collection.
现在,如果我在 Java 中做同样的事情:
try {
Unirest.post("http://localhost:5002/test")
.field("this", "makes")
.field("no", "sense")
.asString();
} catch (UnirestException e) {
e.printStackTrace();
}
我在服务器上得到这个 body,这正是我所期望的:
no=sense&this=makes
headers 在这两种情况下完全相同(显然 body content-length 除外),唯一改变的是 body.
我的 Jython 代码有什么问题?
我相信 jython 字符串在我第一次将它们作为字段传递时以某种方式被 Unirest 视为集合。我不太确定为什么,但是使用这种直觉,我为我的 Jython 代码管理了一个变通方法。
明确地将 Jython 字符串转换为 Java 字符串,据我所知这通常不需要,解决了我的问题。
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
我正在使用来自 Jython (2.7) 和 Java (7) 代码的 java Unirest (1.4.7) 实现。
我在从 Jython 代码发送 http 请求时遇到了问题:
这是 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();
当我在服务器端打印它时,这给了我以下请求 body:
no=sense&this=m&this=a&this=k&this=e&this=s
请求 body 中的第一个 "field" 始终是 "scattered",就好像它是 collection.
现在,如果我在 Java 中做同样的事情:
try {
Unirest.post("http://localhost:5002/test")
.field("this", "makes")
.field("no", "sense")
.asString();
} catch (UnirestException e) {
e.printStackTrace();
}
我在服务器上得到这个 body,这正是我所期望的:
no=sense&this=makes
headers 在这两种情况下完全相同(显然 body content-length 除外),唯一改变的是 body.
我的 Jython 代码有什么问题?
我相信 jython 字符串在我第一次将它们作为字段传递时以某种方式被 Unirest 视为集合。我不太确定为什么,但是使用这种直觉,我为我的 Jython 代码管理了一个变通方法。
明确地将 Jython 字符串转换为 Java 字符串,据我所知这通常不需要,解决了我的问题。
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