我想从https://agent.lionair.co.id/lionairagentsportal/CaptchaGenerator.aspx获取图片验证码。
我无法得到它。
但是,如果我在打开https://agent.lionair.co.id/lionairagentsportal/default.aspx之前打开包含网址https://agent.lionair.co.id/lionairagentsportal/CaptchaGenerator.aspx的新标签页,则会显示该图片。
我对https://agent.lionair.co.id/lionairagentsportal/CaptchaGenerator.aspx感到好奇。如果我已经打开https://agent.lionair.co.id/lionairagentsportal/default.aspx,为什么我无法打开它。
我试过这段代码,但不幸的是我失败了。图像仍未显示。
<?php
//The curl_init() will initialize a new session and return a CURL handle.
//curl_exec($ch) This function should be called after you initialize a CURL session and all the options for the session are set. Its purpose is simply to execute the predefined CURL session (given by the ch).
//curl_setopt( $ch, option, value) Set an option for a CURL session identified by the ch parameter. option specifies which option to set, and value specifies the value for the option given.
$url = "https://agent.lionair.co.id/LionAirAgentsPortal/default.aspx"; // From URL to get webpage contents.
$cookie_file_path = "/opt/lampp/htdocs/curl-examples/cookieFolder/cook";
$ch = curl_init(); // Initialize a CURL session.
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Return Page contents.
curl_setopt($ch, CURLOPT_URL, $url); // Pass URL as parameter.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); // Tempat menaruh cookies.
$html = curl_exec($ch); // grab URL and pass it to the variable.
$ch = curl_init(); // Initialize a CURL session.
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Return Page contents.
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); // Karena keluarannya gambar, maka di- set binary = true.
curl_setopt($ch, CURLOPT_URL, "https://agent.lionair.co.id/LionAirAgentsPortal/CaptchaGenerator.aspx"); // Pass URL as parameter.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); // Tempat cookies di mana cookies mana yang mau digunakan.
$gambar = curl_exec($ch); // grab URL and pass it to the variable.
curl_close($ch); // close curl resource, and free up system resources.
?>
<html>
<head>
</head>
<body>
<form action="https://agent.lionair.co.id/LionAirAgentsPortal/default.aspx" name="form1" method="post">
<label for="txtLoginName">Username: </label>
<input type="text" name="txtLoginName" />
<br/>
<label for="txtPassword">Password: </label>
<input type="password" name="txtPassword" />
<br/>
<img src="data:image/jpeg;base64,<?php echo $gambar; ?>" />
<br/>
<label for="CodeNumberTextBox">Captcha: </label>
<input type="text" name="CodeNumberTextBox" />
<br/>
<input type="submit" value="otentikasi" />
</form>
</body>
答案 0 :(得分:2)
CAPTCHA生成器在会话中定义CAPTCHA,该会话仅由实际页面定义。这是一种非常标准的做法,只提供一种生成CAPTCHA的方法。
如果图像生成器负责生成CAPTCHA,那么您将遇到竞争条件,其中看到的内容不一定是提交页面之前的真实CAPTCHA值。此外,一些开发人员工具(如Firebug和Chrome的开发人员工具)可能会在内部加载图像,这会在用户不知情的情况下更新CAPTCHA。如果图像生成器也创建了CAPTCHA值,它只会导致更多的混淆。
答案 1 :(得分:1)
您可以在页面上使用包含default.aspx页面的透明iframe。这样服务器就会认为他需要为default.aspx页面提供服务,并在客户端上设置会话cookie。稍后,当您尝试访问CaptchaGenerator.aspx页面时,您将收到响应,因为会话cookie将存在于客户端cookie存储中。
<iframe src ="https://agent.lionair.co.id/LionAirAgentsPortal/default.aspx" style="widht:0px;height:0px"/>
您可能希望等待iframe加载,并且在尝试包含图像之前完成cookie创建过程,这可以使用Java Script在客户端完成。
希望我能提供帮助。
答案 2 :(得分:1)
很容易...... 添加以下代码:
$ ImageCaptcha = BASE64_ENCODE($。图片);
在“$ gambar = curl_exec($ ch);”
之后然后更改您的代码:echo $ gambar;
与
echo $ ImageCaptcha;
答案 3 :(得分:0)
变化:
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
这一个:
$cookie="ASP.NET_SessionId="."$cookieValue";
随($ch, CURLOPT_COOKIE,$cookie);
它适用于我,但你需要努力在$ url之前获得cookievalue 希望这有用..