尝试使用一些简单的代码来处理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”,对吧?
答案 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.php
(action="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);