ホームページ  >  記事  >  バックエンド開発  >  WeChat パブリック プラットフォーム上の CURL アプリケーション_PHP チュートリアル

WeChat パブリック プラットフォーム上の CURL アプリケーション_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:48:461179ブラウズ

この記事では、WeChat パブリック プラットフォームでの CURL の適用例を紹介します。このような問題が発生した場合は、お気軽に参照してください。

私は最近仕事でcurlをよく使います。Curlはブラウザをシミュレートしてデータを送信します。HTTP、HTTPS、FTPなどの多くのプロトコルをサポートしており、いくつかの操作を実行するユーザーを収集およびシミュレートするときに非常に便利です。
CURL を使用するには主に 4 つの手順があります:
1. URLを初期化します
2. リクエストのいくつかのパラメーター (COOKIE、HEAD...) を設定します
3. リクエストを実行します
4. リソースを閉じる
まず単純なコレクションについて説明します。一般的に、Web ページのコンテンツを取得する場合は、file_get_contents() 関数を使用して取得するのが最も便利です。

コードは次のとおりですコードをコピー


注: 重要な点は、curl_setopt() 関数の 2 番目のパラメーターにあります (以下に一般的に使用される情報がいくつかあります)
このようにして、この Web ページのコンテンツを取得できます。CURL だけで何かができるのであれば、CURL を使用してさらに魔法のようなことを行うことはできません。
私は最近、起業家精神のある新しい会社に入社しました(ニマ、いくつかオファーがあるので、この会社を選ぶか本当に迷っています。しかし、ここは起業家精神のある会社なので、給与が非常に低いです。わかりません。なぜ選んだのか)とにかく、なぜこの会社を選んだのか友達は困惑していました。実際、他の会社の給料はこの会社の約2倍です。この会社は今回は間違っています。そうしないと、あまりにもくだらない話をした後、死にたくなるでしょう)、私がやっていることは、現在比較的人気のあるWeChatパブリックプラットフォームの開発です。そのため、インターフェイスから取得できるものはほとんどありません (ニーマ、マー兄弟、いつになったらもっとプレイする口実ができたのでしょう!) しかし、公式オペレーティング プラットフォームにはデータのないインターフェイスがたくさんあるため、私たちはそれを行う必要があります。さあ、主人公は CURL に登場します。

まず、パブリックプラットフォームにアクセスするにはログインする必要があるので、最初にログインします(ナンセンス)まず、パケットをキャプチャして通常の投稿データを分析する必要があります。ここではスクリーンショットは撮りません。は bae プラットフォーム上にあり、編集者にはまだ処理する時間がありません (あまりうまく機能しません)。WeChat のパブリック プラットフォームはログインに ajax を使用していると結論付けることができます。送信前に md5 暗号化されています (正式なものは md5 ハッシュと呼ばれるはずで、標準の MD5 ハッシュです。カラムは 128 ビットである必要がありますが、保存と送信の便宜上、最も一般的なものは 32 ビットと 16 ビットです。今初めて知りましたが、恥ずかしいです)もう 1 つの非常に重要な点は、WeChat パブリック プラットフォームではログインに https プロトコルが使用されていることです。最も良い点は、確認コードが必要ないことです。そうしないと、この時点で分析するのが非常に困難になります。さあ!!!

$ch =curl_init();//リソースを初期化します

curl_setopt($ch,CURLOPT_URL,”http://www.mapenggang.com”);//取得したいWebページを設定します
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//直接出力を閉じる
$string=curl_exec($ch);
curl_close($ch);

コードは次のとおりです コードをコピー


$password = md5($password);//先ほどキャプチャしたパケットがmd5で暗号化されていることが判明したので、ここで事前にパスワードを暗号化しておきます


$post = "ユーザー名={$ユーザー名}&pwd={$パスワード}&f=json&imgcode=";
$loginUrl = "https://mp.weixin.qq.com/cgi-bin/login?";//WeChat ログインアドレス

//ここでヘッダー情報を設定する必要があります。これらは、パケットをキャプチャするときに取得できます


$headerArray = 配列(
'Accept:application/json、text/javascript、*/*',
'Content-Type:application/x-www-form-urlencoded',
「参照元:https://mp.weixin.qq.com/」
);

$ch =curl_init();
curl_setopt($ch,CURLOPT_URL,$loginUrl);
// 認証証明書のソースを確認します。0 は証明書の有効性を確認しないことを意味します。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// 証明書から SSL 暗号化アルゴリズムが存在するかどうかを確認します
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//直接出力を閉じる
curl_setopt($ch,CURLOPT_POST,1); //post を使用してデータを送信します
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);//post によって送信されたデータを設定します
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/30.0.1599.69 Safari/537.36');// ユーザー エージェントを設定します
curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);//ヘッダー情報を設定します

curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);//Cookie 保存ディレクトリを設定します。これは非常に重要です (Cookie も保存していないのに、馬化騰だと思っているのですね!)
$loginData =curl_exec($ch); //トークンがここで返されるため、処理する必要があります。

//トークンの値を取得します

$loginData = json_decode($loginData,true);

$token =explode("=",$loginData['ErrMsg']);

$token = array_pop($token);

echo "WeChat システムに正常にログインしました
";


curl_close($ch);


上記は WeChat パブリック プラットフォームにログインするためのコードです。テスト後の使用方法は非常に簡単です。
最近、私は WeChat パブリック プラットフォームで多くの人に公開されていますが、これは長い旅の最初のステップにすぎません。これにより、ユーザーの完全な情報を表示できるようにする方法を後で共有します。私自身のプラットフォーム (私によると) 現時点では、インターネット上で fakeid と openid を一致させる方法について良い解決策が存在しないことをご理解ください。数日間の格闘の後、現在では一致させることができます。これは非常に面倒で、既存のユーザーは一致させることができません (実際、これは理論的には可能です) それは可能ですが、私はまだそれを行っていませんし、ばかげた話はしません。実際、これを行う時間がありません。機会があれば、試してみてください。ただし、実装には既存のシステムのサポートが必要です。つまり、現在のシステムはチャット履歴 (「何と言ったのですか? 私は何も言っていません!))) を記録して使用する必要があります。」
体育の先生、体育の授業がよくなくて中国語を教えに来なかったって言ってましたが、最近書けそうなことがたくさん出てきたので思いついて書きました。ここ数日、主に使用されているのは CURL なので、今日は WeChat パブリック プラットフォームにログインするために用意しているものを書き留めておきます。ここでは、WeChat パブリック プラットフォームについては後ほど詳しく書くかもしれません。
添付ファイル:

CURLOPT_FTP_USE_EPSVCURLOPT_UPLOADCURLOPT_VERBOSE

オプション

オプション

備考

CURLOPT_AUTOREFERER

Location:に基づいてリダイレクトするときに、ヘッダーReferer:情報を自動的に設定します。

CURLOPT_BINARYTRANSFER

CURLOPT_RETURNTRANSFERが有効な場合、ネイティブ (Raw) 出力を返します。

CURLOPT_COOKIESセッション

有効にすると、curlは1つのセッションCookieのみを渡し、他のCookieを無視します。デフォルトでは、cURLはすべてのCookieを返します。 サービス終了。 セッション Cookie は、サーバー側の セッション が有効かどうかを判断するために使用される Cookie を指します。

CURLOPT_CRLF

有効にすると、Unix改行文字が復帰文字と改行文字に変換されます。

CURLOPT_DNS_USE_GLOBAL_CACHE

有効にすると、グローバル DNS キャッシュが有効になります。これはスレッドセーフであり、デフォルトで有効になります。

CURLOPT_FAILONERROR

HTTP ステータス コードを表示します。デフォルトの動作では、400 以下の数値を持つ HTTP 情報を無視します。

CURLOPT_FILETIME

有効にすると、リモートドキュメント内の情報の変更が試行されます。結果情報は、curl_getinfo() 関数の CURLINFO_FILETIME オプションを通じて返されます。 curl_getinfo().

CURLOPT_FOLLOWLOCATION

有効にすると、サーバーから返された "Location: "" が header に配置され、再帰的にサーバーに返されます。再帰的な数を制限するには、CURLOPT_MAXREDIRSを使用します戻り値。

CURLOPT_FORBID_REUSE

インタラクション完了後に強制的に切断され、再利用することはできません。

CURLOPT_FRESH_CONNECT

キャッシュ内の接続を新しい接続に強制的に置き換えます。

CURLOPT_FTP_USE_EPRT

有効な場合 FTPのダウンロード中に、EPRT (またはLPRT)コマンドを使用します。 FALSEに設定されているときにEPRTLPRTを無効にするには、PORTコマンドを使用しますのみ。

有効にすると、FTP転送中にPASVモードに戻る前に、まずEPSVコマンドを試してください。 FALSEに設定すると、EPSVコマンドが無効になります。

CURLOPT_FTPAPPEND

有効にすると、ファイルを上書きするのではなく追加書き込みします。

CURLOPT_FTPASCII

CURLOPT_TRANSFERTEXTのエイリアス。

CURLOPT_FTPLISTONLY

有効にすると、FTPディレクトリの名前のみがリストされます。

CURLOPT_HEADER

有効にすると、ヘッダーファイル情報がデータストリームとして出力されます。

CURLINFO_HEADER_OUT

有効な場合の追跡ハンドルのリクエスト文字列。

PHP 5.1.3 以降で利用可能です。 CURLINFO_接頭辞は意図的(意図的)です。

CURLOPT_HTTPGET

有効にすると、HTTPメソッドGETに設定されます。これは、GETがデフォルトであるため、変更された場合にのみ使用されます。

CURLOPT_HTTPPROXYTUNNEL

有効にすると、HTTPプロキシ経由で送信されます。

CURLOPT_MUTE

有効にすると、cURL関数で変更されたすべてのパラメータがデフォルト値に復元されます。

CURLOPT_NETRC

接続が確立されたら、~/.netrcファイルにアクセスして、リモート サイトに接続するためのユーザー名とパスワード情報を取得します。

CURLOPT_NOBODY

有効にすると、HTMLBODY部分が出力されなくなります。

CURLOPT_NOPROGRESS

有効な場合、curl転送の進行状況バーをオフにする この項目のデフォルト設定は有効です。

:PHPは、このオプションを自動的にTRUEに設定します。このオプションはデバッグ目的でのみ変更する必要があります。

CURLOPT_NOSIGNAL

有効にすると、curlからphpに渡されるすべてのシグナルを無視します。これは、SAPIマルチスレッド送信中にデフォルトで有効になります。

cURL は 7.10 で追加されました

CURLOPT_POST

有効にすると、フォーム送信と同様に、タイプ: application/x-www-form-urlencodedの通常のPOSTリクエストが送信されます。

CURLOPT_PUT

が有効になって HTTP によるファイルの送信が許可される場合、CURLOPT_INFILECURLOPT_INFILESIZE の両方を設定する必要があります。

CURLOPT_RETURNTRANSFER

curl_exec()で取得した情報を直接出力するのではなく、ファイルストリームの形式で返します。

CURLOPT_SSL_VERIFYPEER

を無効にすると、cURLはサーバーからの検証を終了します。 CURLOPT_CAINFOオプションを使用して証明書を設定します CURLOPT_SSL_VERIFYPEERの場合は、CURLOPT_CAPATHオプションを使用して証明書ディレクトリを設定します(デフォルトは2) が有効になっています。CURLOPT_SSL_VERIFYHOST TRUE に設定する必要があります。それ以外の場合は FALSE に設定します。

cURL 7.10以降、デフォルトはTRUEです。 cURL 7.10 以降のデフォルトのバンドルのインストール。

CURLOPT_TRANSFERTEXT

FTP転送にASCIIモードを使用できるようにします。 LDAPの場合、HTMLの代わりにプレーンテキスト情報を取得します。 Windows システムでは、システムは STDOUTバイナリ モードに設定しません。

CURLOPT_UNRESTRICTED_AUTH

ドメイン名が変更された場合でも、CURLOPT_FOLLOWLOCATIONを使用して生成された複数のロケーションにユーザー名とパスワード情報を継続的に追加します。

有効にするとファイルのアップロードを許可します。

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