最近、キャンパス図書館の書籍情報の収集プログラムに取り組んでいます。図書館の書籍を収集するため、投稿を投稿するためのページが必要です。これは、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;
?>
コードをコピー
予想通り、正常に表示されましたが、ページのコンテンツを収集してフォーマットする際に問題が発生しました。それは規則的なもの以外の何ものでもありません。 (キャンパスネットワークのため、イントラネットからのみアクセス可能です)