この記事は、ある程度の PHP の基礎を持ったユーザーに適しています。
開発環境 WAMPSERVER 2.4 + Windows 10
CURL の個人的な理解:
CURL は、ブラウザーの動作をシミュレートするために使用されるツールであり、データ アクセス、送信、ファイルのダウンロードに使用されます。
手動で有効にする - PHP.ini を変更する
extension=php_curl.dll の前のセミコロンを削除します。
自動的に開きます - WAMP で直接開きます
<?php $url = '你想访问的地址'; $ch = curl_init();//初始化CURL对话 -> 可以理解为 打开浏览器 curl_setopt($ch, CURLOPT_URL,$url);//设置CURL参数 -> 可以理解成 调整浏览器的参数(即设置访问地址和一些其他浏览器参数)$result = curl_exec($ch);//执行CURL操作 -> 可以理解为 上面的参数设定好了,这一步才开始执行curl_close($ch);//关闭CURL -> 可以理解为 关闭浏览器 ?>
学校の学務管理システムへのアクセスをシミュレートしようとしています。
まずはブラウザを使ってログインします。
Fiddle でパケットをキャプチャすると、構築する必要がある送信フィールドは次のとおりであることがわかりました:
そして、__VIEWSTATE フィールドの値が動的に生成されることがわかりました。
他の非表示フィールドの値は空か固定です。
__VIEWSTATE フィールドの値は動的に生成されるためです。
まず CURL を使用して HTML ページ全体をキャプチャし、通常のマッチングを使用して __VIEWSTATE フィールドの値を見つけます。
もう一度提出フィールドを構築しましょう。
$url = "http://jwgl.szpt.edu.cn/SzptJwBsII/Secure/login.aspx";$cookie_file = dirname(__FILE__) . '/cookie.txt'; //设置COOKIE存放目录 /** 第一步,获取 __VIEWSTATE 隐藏域的值**/ $ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url); //设置访问的URL。curl_setopt($ch, CURLOPT_HEADER, 1); //是否输出 HTTP 头部信息。 1 输出 / 0 不输出curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //是否把返回的值存储进变量。 1 存进变量 / 0 直接输出curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);//将 cookie 存在指定的目录。 $result = curl_exec($ch);curl_close($ch); preg_match('/name="__VIEWSTATE" value="(.*)"/',$result,$str); $str = $str['1']; $post = array( '__EVENTTARGET' => 'btnLogin', '__EVENTARGUMENT'=> '', '__VIEWSTATE' => $str, '__VIEWSTATEGENERATOR' => '210E3F16', 'ddlUserType' => '0', 'txtLogin' => '账号', 'txtPwd' => '密码' );
元の HTML ページの form タグの action 属性を見ると、このページに送信されたことがわかります。
代码承接第一步的内容 /** 第二步,提交构建字段,并获取cookie**/ $ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch,CURLOPT_POST,1); //设置是否用 POST 提交。 1 POST / 0 GETcurl_setopt($ch,CURLOPT_POSTFIELDS,$post);//设置 POST 提交的内容curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);//读取 COOKIE 并在访问时带上。curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); //存储响应时的 COOKIE $result = curl_exec($ch);curl_close($ch);
結果を出力する (つまり、$result を出力する) と、Cookie を正常に取得したことがわかります。
/* * 第三步 ,带着cookie去登陆之后的页面 * */ $Second_url='http://jwgl.szpt.edu.cn/SzptJwBsII/default.aspx'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $Second_url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); $result = curl_exec($ch); curl_close($ch);
結果を印刷する (つまり $result を印刷する) と、個人ページに正常にアクセスできたことがわかります。
コード github アドレス: https://github.com/Modokey/CURL_DEMO/blob/master/demo.php
ブラウザー データの相互作用についての個人的な理解を深めます。
HTTP ヘッダーについて少しずつ理解できるようになりました。
Baidu で CURL を学ぶ過程で、模擬アクセスを行うと一般的に UA と IP がもたらされることに気づきました。
何か間違っている点がございましたら、修正していただければ幸いです。