ホームページ  >  記事  >  バックエンド開発  >  [PHP] CURL 入門

[PHP] CURL 入門

WBOY
WBOYオリジナル
2016-06-23 13:07:421134ブラウズ

はじめに

この記事は、ある程度の PHP の基礎を持ったユーザーに適しています。

開発環境 WAMPSERVER 2.4 + Windows 10

CURL の個人的な理解:

CURL は、ブラウザーの動作をシミュレートするために使用されるツールであり、データ アクセス、送信、ファイルのダウンロードに使用されます。

CURL 拡張機能を有効にする

  • 手動で有効にする - PHP.ini を変更する

    extension=php_curl.dll の前のセミコロンを削除します。

  • 自動的に開きます - WAMP で直接開きます

CURL の基本モード

<?php  $url = '你想访问的地址';  $ch = curl_init();//初始化CURL对话 -> 可以理解为 打开浏览器  curl_setopt($ch, CURLOPT_URL,$url);//设置CURL参数 -> 可以理解成 调整浏览器的参数(即设置访问地址和一些其他浏览器参数)$result = curl_exec($ch);//执行CURL操作 -> 可以理解为 上面的参数设定好了,这一步才开始执行curl_close($ch);//关闭CURL -> 可以理解为 关闭浏览器  ?> 

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 を使用してログイン成功ページに移動します

    /*     *  第三步 ,带着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 がもたらされることに気づきました。

何か間違っている点がございましたら、修正していただければ幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。