卷曲发布错误

时间:2016-11-25 15:12:01

标签: php ssl curl post

当我使用php CURL发布到此链接时,我希望获得该值:“https://www.turkiye.gov.tr/btk-numara-tasima”但是当我尝试这样做时,我无法获得任何值,下面的代码只显示我的页面链接。问题是什么?

<?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;
}

?>

1 个答案:

答案 0 :(得分:0)

您的代码存在两个问题:

1)当您使用真实浏览器导航网站时,在获取页面时会存储/更新Cookie,并在每次后续请求时将其发送回服务器。你不是存储cookie也不是发送它们。

2)你传递的token因每个请求而异。这是一种验证请求的“密码”。

要解决此问题,首先要设置curl选项来管理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";
相关问题