ホームページ >バックエンド開発 >PHPチュートリアル >Curl メソッドがページをクロールするときに発生する問題、

Curl メソッドがページをクロールするときに発生する問題、

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

少し前に、学校の教務システムへのログインを模擬するためにcurlメソッドを使用して(ASPで作成された、非常にひどい文章です)情報コンテンツをクローリングして、コンテンツ。
その後、学校の学務管理システムが更新され、JSPで記述され、認証コード機能が追加されました。その後、認証コードを取得して入力し、curlメソッドを使用してHTTPリクエストを送信しましたが、結果はキャプチャされました。それらはすべて 「データベースがビジーです。後でもう一度お試しください」 であり、URL を入力してアドレス バーに直接入力することで学術管理システムにアクセスでき、HTTP リクエストを行うために POSTMAN を使用します。 、GET メソッドと POST メソッドの両方がシステムに入ることができます。PHP の CURL メソッドを使用した場合のみ、「データベース ビジー」が発生します。 。その後、net:http メソッドを使用して同様のコードを書きました。「データベースがビジーです。後でもう一度お試しください。」というメッセージも表示されました。アドレス バーに URL をコピーして入力することもできます。 。何が問題なのか分かりません。 。助けを求める。 。
下の写真。 。


	echo $url.'<br>';	$ch = curl_init($url); 	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 	$content = curl_exec($ch); 	curl_close($ch);	echo $content;

このコードでは、他の setopt は追加されていません。 。神に導きを求めてください。 。何が問題ですか。 。


ディスカッションへの返信 (解決策)

//USERAGENT 模拟一个试试curl_setopt($c,CURLOPT_USERAGENT,'Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; c8650 Build/GWK74) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/4.5 Mobile Safari/533.1s'); 

ユーザー エージェントを評価し、メイン モデルを見てみましょう。

//USERAGENT 模拟一个试试curl_setopt($c,CURLOPT_USERAGENT,'Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; c8650 Build/GWK74) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/4.5 Mobile Safari/533.1s'); 



1L への返信:
最初は、UserAgent の問題だと思いましたが、この文を追加しても、依然として「データベースがビジーです」と表示されます

ユーザー エージェントが間違っていると思います。メインモデルが見ていきます。



1 階のユーザー エージェントと同様の setopt を追加しましたが、まだ「データベースがビジーです」と表示されます

print_r(file_get_contents($url)); これは何を要求しますか?

おかしいですね、ヘッダーが少し違うかも知れません。

print_r(file_get_contents($url));

これは何を要求しますか? 上の図に示すように、


も「データベースがビジー」です。 。 。
確認コードのせいでしょうか?

捕まえたパッケージを投稿して見てください。


前回の返信でコードを入力するのを忘れてしまいました

取得したパッケージを投稿して見てみましょう。






上記は、ログインが成功した場合のリクエスト ヘッダーです


これは私がシミュレートしたリクエスト ヘッダーです。 。
1. 彼は確認コードを持っていますが、どのように処理しましたか

2. 彼は Cookie を持っていますが、あなたがそれをどのように処理したかを見ていませんでした

キャプチャしたパッケージを投稿して確認してください。






上記は、ログインが成功した場合のリクエスト ヘッダーです


これは私がシミュレートしたリクエスト ヘッダーです。 。

URL に検証コード パラメータがあることだけがわかりましたが、Cookie の処理についてはわかりませんでした。curl に Cookie 関連のパラメータを追加してみてください。
Curl の Cookejar と opt ヘッダーの設定が必要で、これら 2 つの使い方をオンラインで検索すると結果が得られるはずです

皆さんの返信のおかげで、問題は解決されました。

具体的な問題は、ログイン後に Cookie を取得し、その後の操作を実行する必要があると考えていました。後で、ログイン時に認証コードを取得するときに JSESSIONID (Cookie) が割り当てられることがわかりました。では、この Cookie を一緒に送信する必要があります。次に、最初にアクセスをシミュレートするカールを書きました

2 階の未完成部分の続き:

最初に検証コード アドレスへのアクセスをシミュレートするカールを書き、Cookie を取得して保存しました。検証コードが表示され、フォームが送信され、ポストフィールドに送信されると、シミュレーションは成功します。 。


ありがとうございます、すぐに投稿します

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