ホームページ >php教程 >php手册 >phpカールはデータを送信するポストリクエストをシミュレートします

phpカールはデータを送信するポストリクエストをシミュレートします

WBOY
WBOYオリジナル
2016-06-21 08:47:581243ブラウズ

最近、キャンパス図書館の書籍情報の収集プログラムに取り組んでいます。図書館の書籍を収集するため、投稿を投稿するためのページが必要です。これは、curl の模擬投稿を思い出させます。 , firebug を使用してパケットをキャプチャし、送信後のクエリを実行します。最終的な形式は次のとおりです。

txtWxlx=CN&hidWxlx=spanCNLx&txtPY=HZ&txtTm=%D2%F4%C0%D6&txtLx=%25&txtSearchType=1&nMaxCount=100&nSetPageSize=10&cSortFld=%D5%FD%CC%E2%C3%FB&B1=%BC %EC +%CB%F7 ;検索キーワード名=txtTm、その後のコードは次のとおりです:

コードをコピー

$keyword="音楽";$post="txtWxlx=CN&hidWxlx=spanCNLx&txtPY=HZ&txtTm={$keyword}&txtLx=%25&txtSearchType=1&nMaxCount=100&nSetPageSize=20&cSortFld=%D5%FD%CC%E2%C3%FB&B1= %BC%EC+%CB%F7";

$url = "http://210.30.68.130/wxjs/tmjs.asp";

//アドレスをクエリ

$ch =curl_init();

curl_setopt ($ch, CURLOPT_REFERER, "http://210.30.68.130/wxjs/tmjs_form.asp/ "); //シミュレーションソース

curl_setopt($ch, CURLOPT_URL, $url);//URL

curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);

curl_setopt($ch, CURLOPT_HEADER, false);

curl_setopt($ch, CURLOPT_POST, 1) //POST をシミュレートします

curl_setopt($ch, CURLOPT_POSTFIELDS, $post);//POST コンテンツ

curl_exec($ch)

$output =curl_close($ch);

echo $output;

?>

コードをコピー

しかし、返されるページには、常に関連するコンテンツがないと表示されます。キーワードを英語または数字に変更すると、正常に表示されるので、これはエンコードの問題であると考えました。すると、txtTm=% が表示されます。投稿の D2%F4 %C0%D6 は、これが URL エンコーディングであることを知り、英語の場合は変換されないため、次のようにヘッダー情報にいくつかの内容が追加されました。

$header = array();

$header[] = 'ユーザーエージェント: Mozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20100101 Firefox/30.0';

$header[] = 'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';

$header[] = '接続: キープアライブ';

$header[] = 'Content-Type:application/x-www-form-urlencoded';

curl_setopt ( $ch, CURLOPT_HTTPHEADER, $header );

実際、主な理由は、$header[] = 'Content-Type:application/x-www-form-urlencoded'; ページを再度ロードした後、中国語の文字が表示される場合、関連するコンテンツがまだないことです。そこで、非常に単純な問題を思いつきました。PHP プログラムは utf8 ですが、ライブラリの Web サイトは gb2312 です。$keyword = iconv('UTF-8', 'GB2312', $keyword); という文を追加します。問題の鍵は、ヘッダー情報を削除し、$keyword = urlencode($keyword) を追加して再度ロードすることです。これは次のコードです。

コードをコピー

$keyword="世界";

$keyword = iconv('UTF-8', 'GB2312', $keyword);

$keyword = urlencode($keyword);

$post="txtWxlx=CN&hidWxlx=spanCNLx&txtPY=HZ&txtTm={$keyword}&txtLx=%25&txtSearchType=1&nMaxCount=100&nSetPageSize=20&cSortFld=%D5%FD%CC%E2%C3%FB&B1=%BC%EC+%CB% F7";

$url = "http://210.30.68.130/wxjs/tmjs.asp";

//アドレスをクエリ

$ch =curl_init();

curl_setopt ($ch, CURLOPT_REFERER, "http://210.30.68.130/wxjs/tmjs_form.asp/ "); //シミュレーションソース

curl_setopt($ch, CURLOPT_URL, $url);//URL

curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);

curl_setopt($ch, CURLOPT_HEADER, false);

curl_setopt($ch, CURLOPT_POST, 1) //POST をシミュレートします

curl_setopt($ch, CURLOPT_POSTFIELDS, $post);//POST コンテンツ

curl_exec($ch)

$output =curl_close($ch);

echo $output;

?>

コードをコピー

予想通り、正常に表示されましたが、ページのコンテンツを収集してフォーマットする際に問題が発生しました。それは規則的なもの以外の何ものでもありません。 (キャンパスネットワークのため、イントラネットからのみアクセス可能です)



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