2015-07-26 3 views
2

Пробовал какой-то простой код для работы с cURL, но не повезло .. Я попытался открыть форму, но ничего не происходит и ошибки не возникает.php 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 он должен перейти на другую страницу и вернуть некоторые данные. Я делаю что-то неправильно?

--- UPDATE

Вот мой простой код 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", как мой результат , правильно?

+1

Это выглядит нормально для этого кода. Можете ли вы показать полный код, включая home2.php? – spicydog

+0

Попробуйте добавить эти 2 строки до curl_exec 'curl_setopt ($ ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, 0); ' – Mihai

+0

@spicydog Выполнено. Обновлено сообщение. –

ответ

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, но при создании локонов запроса, вы отправляете имя пользователя 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 сниффер пакетов) покажет вам именно то, что просит браузер делает с какими переменными, какие URL-адреса, и вы сможете реплицировать его проще.

Примечание: Если success.php страница, которая, по-видимому login.php перенаправляет на успех делает что-либо вообще, вы также должны иметь это будет вызываться автоматически.

Если login.php автоматически перенаправляет, вы можете просто использовать локоны варианта CURLOPT_FOLLOWLOCATION набор к 1.

+0

Это сработало. Поэтому я пытаюсь сделать с некоторым сайтом, который мне нужен, и это не мое (не localhost). Но я столкнулся с проблемой, которая также не POST, и я использую правильное имя в качестве своего ввода. Какие изменения в форме указывают на что-то вроде этого: index.php # tabs-1. И даже если я установил это для своего URL-адреса, POST не произойдет. Как вы думаете, я должен открыть другой вопрос, чтобы быть более конкретным? –

+0

Если единственная разница - это хэштег, тогда происходит некоторая javascript fiddling. Используйте сниффер HTTP, чтобы узнать, какие запросы он делает при нажатии кнопки, которую вы хотите подражать. – h2ooooooo

+0

Используя то, что вы сказали и перейдете к источнику просмотра, я нашел его. Это было скрытое поле. Теперь он работает. - Извините, что продолжал беспокоить вас, но что, если я хочу сделать как 100 запросов каждый раз и захватить возвращенные данные. Легкое задание? Я имею в виду, что результатом является полная веб-страница, и я хочу часть полей. Я не знаю, что искать .. «cURL grab data»? @ h2ooooooo –

1

Вы упомянули «Когда подача происходит в форме home2.php, она должна перейти на другую страницу». Под этим вы подразумеваете, что есть перенаправление HTTP? Если это так, вам нужно сообщить cURL о переадресации. Как это:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
+0

При отправке файла он должен перейти в login.php, как указано в форме действия в home2.php. Я обновил сообщение с полным кодом. Также попробовал то, что вы предложили, но все тот же. @Asaph –