因此,我正在一个涉及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编码,以使其正常工作。
感谢您的帮助