来自Java的API调用,结果怪异?

时间:2018-10-11 21:30:17

标签: java php json api

因此,我正在一个涉及Java应用程序的项目中进行调用。它必须通过GET来发送数据,直到这一点为止,我都可以做到这一点而没有任何问题,但是,我正在尝试将json字符串作为GET参数之一发送。

现在,在API上,调用时GET变量将为空,但是,如果我在调用API页面上使用'print_r'或'var_dump'时,它将神奇地起作用。 (明显的讽刺)

我知道这听起来可能令人困惑,那是因为。到目前为止,我在打电话时没有任何问题。

我的无效代码:(引发错误之一。)

PHP

$checking = array(1, 2, 3);
$data = json_decode(base64_decode(urldecode($_GET['update'])), true);
if(!isset($data))
{
    exit(json_encode(array("Error"=>"Invalid data")));

}
if(count($data) != count($checking))
{
    exit(json_encode(array("Error"=>"Invalid amount: ")));
}

JAVA

List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();

for(ClientBase pb : this.clients)
{
    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("id", pb.id);
    map.put("type", pb.getType());
    map.put("status", pb.getStatus() ? 1 : 0);
    list.add(map);
}

String out = JSONObject.valueToString(list);
String newout = new String(Base64.encode(out.getBytes()));
URLConnection conn = new URL("http://localhost/api/?key=" + Main.INSTANCE.APIKEY + "&update=" + URLEncoder.encode(newout, "UTF- 8")).openConnection();
InputStream is = conn.getInputStream();
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
res = s.hasNext() ? s.next() : "";

这将导致由于数组为空/空而引发错误之一。

现在,如果我将PHP代码更改为:

$checking = array(1, 2, 3);
$data = json_decode(base64_decode(urldecode($_GET['update'])), true);
var_dump($data);
if(!isset($data))
{
    exit(json_encode(array("Error"=>"Invalid data")));

}
if(count($data) != count($checking))
{
    exit(json_encode(array("Error"=>"Invalid amount: ")));
}

然后填充$ data数组,并且不会引发任何错误。

我实在无法绕过这个头,我也对它进行了base64编码和urlencode编码,以使其正常工作。

感谢您的帮助

0 个答案:

没有答案