【发布时间】:2017-06-02 21:40:42
【问题描述】:
编辑:有关解决方案,请查看下方 Barmar 的回复。希望这对遇到类似问题的人有所帮助。
我正在尝试从我的 test.php 文件中获取登录信息并将其 cURL 到一个站点,该站点使用数据来模拟另一个页面上的登录(我知道这很乏味,但这并不是我作为一个整体在做什么,就在我遇到问题的地方)。因此,我将编码的 json 发布到 index.php url,解码它没有问题。然后使用传递的信息并编辑解码的 json 以显示成功或不成功的登录。然后再次对 json 进行编码并回显到页面上并保存在 test.php 上的 $contents 中。当我尝试在这个文件上解码它时,我每次都得到 NULL。我已经尝试了很多东西,并且刚刚开始认为我在某个地方犯了一个愚蠢的错误,所以我拼命地在这里寻求任何帮助。
-如果我回显 $contents 它会显示:
{"user":"user","pass":"password","success":true}
-如果我 var_dump(trim($contents)) 它显示(格式完全如图所示):
string(364) "
{"user":"user","pass":"password","success":true} "
-last_json_error_msg 显示:
SYNTAX ERROR
-我尝试过修剪、utfencoding、iconv、设置 curl 标题以及我在此处其他帖子中看到的所有推荐内容。
任何帮助都将不胜感激。在此先感谢各位。
test.php:
<html>
<head>
<meta charset="UTF-8">
<title>TITLE</title>
</head>
<body>
<form action="test.php" method=POST>
<input type="text" name="user">
<input type="password" name="pass">
<input type="submit" value="Submit">
</form>
<?php
function logInfo(){
class data{
public $user = "";
public $pass = "";
public $success = false;
}
$data = new data();
$data->user = $_POST['user'];
$data->pass = $_POST['pass'];
$ch = curl_init();
$json = json_encode($data);
curl_setopt($ch, CURLOPT_URL, [URL TO INDEX.PHP]);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array("data"=>$json));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$contents = curl_exec($ch);
curl_close($ch);
$array = json_decode($contents, true);
var_dump($array);
//VAR_DUMP SHOWS NULL
}
if(isset($_POST['user']) && isset($_POST['pass'])){
logInfo();
}
?>
</body>
</html>
index.php:
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="test.php" method=POST>
<input type="hidden" name="data">
</form>
<?php
header('Context-type: application/json');
function logInfo(){
$datastring = $_POST['data'];
$data = json_decode($datastring);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, [URL TO SIMULATE LOGIN]);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, [LOGIN POST]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($code == [SUCCESSFUL LOGIN HTTP CODE]){
$data->success = true;
} else {
$data->success = false;
}
echo json_encode($data);
curl_close ($ch);
}
if(isset($_POST['data'])){
logInfo();
}
?>
</body>
</html>
编辑:有关解决方案,请查看下方 Barmar 的回复。希望这对遇到类似问题的人有所帮助。
【问题讨论】: