php cURL - POST无效

时间:2015-07-26 04:53:19

标签: php post curl

尝试使用一些简单的代码来处理cURL,但没有幸运.. 我试图POST一个表单但没有任何反应,也没有发生错误。

这是我的代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost:8888/curl/home2.php');
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'usuario=teste&senha=12345');
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$store = curl_exec ($ch);

print_r(curl_getinfo($ch));
echo curl_errno($ch) . '-' . 
                curl_error($ch);

echo $store;

当提交发生在home2.php表单上时,它应该转到另一个页面并返回一些数据。我做错了吗?

---更新

这是我简单的home2.php代码:

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
    <form method="POST" action="login.php" id="formLogin" name="formLogin">
        Usuario <input name="login" type="text">
        Senha <input name="senha" type="text">
        <input type="submit">
    </form>
</body>
</html>

login.php:

<?php

$login = $_POST['login'];
$senha = $_POST['senha'];

if($login == "teste"){
    echo "OK";
}

?>

我的结果应该是“OK”,对吧?

2 个答案:

答案 0 :(得分:2)

home2.php上的表单如下所示:

<form method="POST" action="login.php" id="formLogin" name="formLogin">
    Usuario <input name="login" type="text">
    Senha <input name="senha" type="text">
    <input type="submit">
</form>

请务必注意,用户名输入框的名称为login,但在创建cURL请求时,您需要将用户名作为usario发送。这需要改变。您还需要模拟浏览器会执行的操作,并将帖子变量发送到login.phpaction="login.php")而不是home2.php(此页包含表单,并且从不接收任何输入表单数据。)

总而言之,您的代码应该可以通过以下方式修复:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost:8888/curl/login.php');
// Change the URL                                         ^^^^^
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'login=teste&senha=12345');
// Change the username key             ^^^^^
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$store = curl_exec ($ch);

print_r(curl_getinfo($ch));
echo curl_errno($ch) . '-' . 
                curl_error($ch);

echo $store;

如果您有任何疑问,浏览器中的网络标签(或任何HTTP数据包嗅探器)都会准确地告诉您浏览器提出的请求,包含哪些变量,哪些网址以及您的网址是什么?能够更容易地复制它。

注意:如果success.php login.php显然重定向到成功的页面完成了任何操作,那么您还需要自动调用此页面。

如果login.php自动重定向,您只需将cURL选项CURLOPT_FOLLOWLOCATION设置为1即可。

答案 1 :(得分:1)

你提到了#34;当提交在home2.php表单上发生时,它应该转到另一个页面&#34;。那你的意思是说有一个HTTP重定向?如果是这样,您需要告诉cURL遵循重定向。像这样:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);