2016-11-25 4 views
0

Я хочу получить значение, когда я отправляю сообщение с php CURL по этой ссылке: «https://www.turkiye.gov.tr/btk-numara-tasima», но когда я пытаюсь это сделать, я не могу получить какое-либо значение, код ниже просто покажет мне страницу ссылки , В чем проблема?Curl Post Error

<?php 

$curl=curl_init(); 
$data = "txtMsisdn=5441234567&token=%7B730FD6-BC236F-6AE440-B5E1CB-338E67-00EA4E-0C7F28-58EE4A-3FA9F9-EAA9A2%7D"; 
curl_setopt($curl, CURLOPT_URL, "https://www.turkiye.gov.tr/btk-numara-tasima"); 
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
curl_setopt($curl, CURLOPT_VERBOSE, true); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,0); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,0); 
$content = curl_exec($curl); 


if(curl_exec($curl) === false){ 
    echo 'Curl error: ' . curl_error($ch); 
}else{ 
    echo 'Opatation comlated without error'; 
    echo $content; 
} 

?> 
+0

Возможно, вы используете 'curl_exec()' дважды? Измените 'if ($ curl_exec ($ curl) === false)' to 'if (empty ($ content))' и повторите попытку –

+0

Не bro. Я попытался, ничего не изменилось. – bedesten1618

+0

Вы определенно не хотите запускать 'curl_exec' дважды. Кажется, что код работает нормально, может быть, вы не пройдете проверку с вашим запросом, и сервер не делает то, что вы хотите, с помощью запроса POST? – quickshiftin

ответ

0

У вас есть две проблемы с вашим кодом:

1), как вы ориентируетесь на сайт с реальным куки браузера хранятся/обновляются, когда страницы получить и отправлены обратно на сервер при каждом последующем запросе. Вы не храните файлы cookie и не отправляете их.

2) token, который вы передаете, зависит от каждого запроса. Это своего рода «секретный код» для проверки запроса.

Чтобы решить эту проблему, сначала у вас есть настройки завивки для управления файлами cookie. Файлы cookie будут храниться в небольшом текстовом файле по вашему выбору.

Тогда вы должны разделить задачу на два этапа:

первый шаг: загрузите страницу и разбора token

второй шаг: отправить запрос на почту, проходящую разобранного token

Это некоторые изменения вашего исходного кода. Вы также можете запустить его из командной строки.

Единственная нетривиальная часть - извлечение токена, но на самом деле это просто манипуляция с строкой.

<?php 

// Load the page 

$curl=curl_init(); 
curl_setopt($curl, CURLOPT_URL, "https://www.turkiye.gov.tr/btk-numara-tasima"); 
// curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($curl, CURLOPT_VERBOSE, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,0); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,0); 
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookies.txt'); // <-- read/write cookies into a text file 
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookies.txt'); // <-- read/write cookies into a text file 
$content = curl_exec($curl); 
curl_close($curl); 

// Parse output to extract token 

$content = substr($content, strpos($content, '<input type="hidden" name="token" value="') + strlen('<input type="hidden" name="token" value="')); 
$token = substr($content, 0, strpos($content, '"')); 
$token = urlencode($token); 

// This is the number to query 

$number = '5441234567'; 

// Put together token and number 

$data = 'txtMsisdn=' . $number . '&token=' . $token; 

// Perform post request 

$curl=curl_init(); 
curl_setopt($curl, CURLOPT_URL, "https://www.turkiye.gov.tr/btk-numara-tasima?submit"); 
//curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($curl, CURLOPT_POST, true); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
curl_setopt($curl, CURLOPT_VERBOSE, false); 
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,0); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,0); 
curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookies.txt'); // <-- read/write cookies into a text file 
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookies.txt'); // <-- read/write cookies into a text file 
$content = curl_exec($curl); 
curl_close($curl); 

// Parse output 

$content = substr($content, strpos($content, '<div class="reminderContainer">') + strlen('<div class="reminderContainer">')); 
$result = substr($content, 0, strpos($content, '</div>')); 

echo $result . "\n";