検索
ホームページバックエンド開発C#.Net チュートリアルHttpClient は Web ページのソース コードをクロールします

インポート java.io.BufferedReader;

インポート java.io.InputStreamReader;

インポート java.text; .SimpleDateFormat;
import java.util.Date;
import java.util.List; ;
import java.util.zip.GZIPInputStream;
import org.apache.commons.httpclient.HttpClient; apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.HttpStatus; commons.httpclient.SimpleHttpConnectionManager;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpConnectionManagerParams; org.apache.commons.httpclient.params.HttpMethodParams;

/ **
* @author Liuwei
* 日付: 2009 年 12 月 18 日
*
* TODO
* HttpClient の補助クラス
* /
public class HttpClientHelper
{

/ **
* HttpClient の接続タイムアウト、読み取りデータのタイムアウト設定 (単位: ミリ秒)
* /
Public static Final int HTTPCLIENT_CONNECTION_TIMEOUT = 30000;
Public static Final int HTTPMETHOD_SO_TIMEOUT = 5000; ConnectionManager の管理 接続を閉じるかどうかwhen httpclientconnection
private static boolean alwaysClose = FALSE;
private static string defaultEncode = "UTF-8";

private static last DateFormat = new SimpleDateFormat("YYYY-MM-DD HH:MM:SS "); **
* HttpClient 接続を取得し、関連するパラメーターを設定します
*
* @return
* /
public static HttpClient の getHttpClient()
{
HttpClient client = new HttpClient (new SimpleHttpConnectionManager (alwaysClose)); ionManagerParams managerParams = クライアント.getHttpConnectionManager() getParams() メソッド。
//接続タイムアウトを設定します (ミリ秒単位)
managerParams.setConnectionTimeout (HTTPCLIENT_CONNECTION_TIMEOUT);
//読み取りデータのタイムアウトを設定します (ミリ秒単位)
クライアントに戻ります。
/ * *
* HttpClient 接続を取得し、関連するパラメーターを設定します
*
* @parameter logonSite
* @parameter logonPort
* @parameter Protocol
* @return
* /
public static HttpClient の getHttpClient (最後の文字列 logonSite、最終解釈 logonPort 、最後の文字列プロトコル)
{
HttpClient client = new HttpClient(new SimpleHttpConnectionManager(alwaysClose));
client.getHostConfiguration() setHost(logonSite, logonPort, プロトコル)。
HttpConnectionManagerParams managerParams = client.getHttpConnectionManager() getParams() メソッド。
//接続タイムアウトを設定します (ミリ秒単位)
managerParams.setConnectionTimeout (HTTPCLIENT_CONNECTION_TIMEOUT);
//読み取りデータのタイムアウトを設定します (ミリ秒単位)
クライアントに戻ります。
プライベートstatic List getHeaders(MapHeaders)
{
List = ヘッダーの配列 new ();
if ( empty = header&& false == ヘッダー) .isEmpty() )
{
set> =entrySet header.entrySet();
for (enter エントリ:entrySet)
if (false == includeUserAgent
&& "UserAgent".equals(entry.getKey()))
{
includeUserAgent = TRUE;
}
headers(new headers()entry.getKey(),entry.getValue()))
} }

if (false == includeUserAgent)
{
headers.add(new headers(
"UserAgent",
"Mozilla/4.0( と互換性があります。MSIE 7.0; Windows NT 5.1; GTB5; .NET CLR 1.1.4322; .NET CLR 2.0 0.50727; Alexa ツールバー; MAXTHON 2.0)"));
}
Return Header;
}

Private static NameValuePair [] getPairs(Map POSTDATA)
{
if (null == | | POSTDATA postData.isEmpty())
{
return
}

文字列 , 文字列 >> =
INT DATALENGTH =
NameValuePair ] = 新しい NameValuePair[DATALENGTH]
INT I = 0;
For (entryentrySet)
{
double[i++] = new NameValuePair(entry.getKey(),entry.getValue());
return ペア
}

/ **
*Web コンテンツ情報のリクエスト
*
* @parameter HttpClient
* @parameter reqUrl
*パラメータ タイトル
* @parameter POSTDATA
*パラメータ エンコーディング
* @return
* /
public static string doRequest(HttpClient HttpClient, String reqUrl,
Map ヘッダー, MapPOSTDATA, String エンコーディング)
{
String htmlContent = NULL;
if (null == HttpClient )
{
Return htmlContent;

//エンコーディング設定のリクエスト

//ヘッダーリクエスト情報
ListSystem.out.println("[" + DATE_FORMAT.format(new Date()) + "] - doRequest - " + reqUrl); <br><br>//Post メソッド <br> if (null = POSTDATA!) <br>{ <br> PostMethod PostMethod = new EncodePostMethod(reqUrl,coding); <br>for (header tempHeader: header) <br>{ <br>postMethod.setRequestHeader(tempHeader); <br><br>//Post パラメータ設定 <br>NameValuePair[] = PARAMS getPairs(POSTDATA ; <br>Other<br>{ <br>) GetMethod getMethod = 新しい実装 getMethod(reqUrl); <br>for (head tempHeader: header) <br>{ <br>getMethod.setRequestHeader(tempHeader) <br>} <br><br>//Web ページのコンテンツを抽出 <br>htmlContent =executeMethod(HttpClient , getMethod, encoding, NULL) ); <br>} <br>Return htmlContent; <br><br> プライベート静的文字列 getWebSite(String reqUrl) <br>{ <br>String website = NULL; <br> if (null == reqUrl || reqUrl.isEmpty( )) <br>{ <br>Web サイトに戻る<br>} <br><br>文字列プレフィックス = "HTTP://"; <br>if (reqUrl.startsWith(prefix)) <br>{ <br>INT インデックス = reqUrl.substring(prefix.length()) IndexOf("/") + prefix.length (); <br>Website = reqUrl.substring(0,index); <br>} <br>Web サイトに戻る <br>} <br><br>/ ** <br>* HTTPMethod を列挙して Web ページのコンテンツを取得します <br>* <br>* @parameter HttpClient <br>* requestMethod <br>* パラメータのエンコーディング <br> * パラメータのウェブサイト <br>* @return <br>* / <br> private static string useMethod (HttpClient HttpClient, enum HTTPMethod requestMethod, エンコードされた文字列, 文字列 Web サイト) <br> { <br>String responseContent = NULL; ) <br>{ <br>return responseContent; <br>} <br><br>//暗号化されたデータをリクエストするかどうかを決定する <br> Boolean dataEncrypt = FALSE; <br>Header acceptEncoding = requestMethod.getRequestHeader(" エンコーディングを受け入れる");空 = acceptEncoding <br>。 && acceptEncoding.getValue() contains("gzip")) <br>{ <br>dataEncrypt = TRUE; <br><br>InputStream responseStream = NULL; <br>INT status = httpClient.executeMethod(requestMethod) <br>if(HttpStatus .SC_OK) == ステータス) <br>{ <br>responseStream = requestMethod.getResponseBodyAsStream(); <br>responseContent = getContentByStream(dataEncrypt new GZIPInputStream(responseStream): responseStream, encoding); <br>responseStream.close() <br> //リターン コードが 30130 2303307 の場合これは、ページがリダイレクトされたことを意味し、その場所の URL を再リクエストします。これは、Cookie を取得するために一部のログイン認証が使用される場合に重要です。それ以外の場合、(HttpStatus.SC_MOVED_PERMANENTLY == ステータス <br>|| HttpStatus.SC_MOVED_TEMPORARILY = = ステータス <br>|| HttpStatus .SC_SEE_OTHER == ステータス <br>|| HttpStatus.SC_TEMPORARY_REDIRECT == ステータス) <br>{ <br> //新しい URL アドレスを読み取ります <br>Header = requestMethod.getResponseHeader("position"); ) <br>{ <br>String redirectUrl = header.getValue(); <br>if (null = redirectUrl! <br>&& false == redirectUrl.isEmpty()) <br>{ <br>responseContent = void <br>if (null == redirectUrl || redirectUrl.isEmpty; ()) <br>{ <br> redirectUrl = "/"; <br>} <br><br> if (false == redirectUrl.startsWith("http://") <br>! && empty = website) <br>{ <br> if (website.startsWith( "/ ")) <br>{ <br> redirectUrl = website + redirectUrl; <br>} <br> other <br>{ <br> redirectUrl = website + "/" + redirectUrl; <br>} <br>} <br><br>GetMethod リダイレクト = 新しい実装 getMethod( redirectUrl); <br>ヘッダリファラー = requestMethod .getRequestHeader("リファラー"); <br>if (null = リファラー! ; + } <br><br>} //ターミナル <br><br>} //終了ステータス <br><br>} の追いつき (例外 5) <br>{ <br>e.printStackTrace() <br>}最後に <br>{ <br>;If (requestMethod! = NULL) <br>{ <br>requestMethod.releaseConnection(); <br>} <br>} <br>ReturnContent; <br>} <br><br>/ ** <br>* 指定されたエンコーディングに従ってストリームから情報を読み取る <br>* <br>* @parameter inStream <br>*パラメータエンコーディング<br>* @return <br>*IOExceptionをスローします <br>* / <br>パブリック静的文字列getContentByStream(InputStream inStream, Stringエンコーディング)はIOExceptionをスローします <br>{ <br>if (null == Break) <br>{ <br> return NULL <br>} <br><br>StringBuilder content = new StringBuilder(); <br>//指定されたエンコード形式を使用してストリーム コンテンツを読み取ります <br>BufferedReader (new InputStreamReader(Interstitial, encoding)); <br>String message = NULL; .readLine())!) <br>{ <br>content.append(message); <br>content.append("r n") <br>} <br>// リーダーを閉じ、リソースを解放します <br>reader.close(); toString()); <br>} <br><br>/ ** <br>*PostMethod から継承された内部クラス。郵便リクエストのエンコード形式を指定するために使用されます <br>* / <br>EncodePostMethod によって拡張されたパブリック静的クラス PostMethod <br>{ <br> プライベート文字列エンコーディング = NULL; <br> public EncodePostMethod(URL String, String encode) <br>{ <br> super(URL); <br>this.encode = encode; <br>} <br><br>@override <br> public String getRequestCharSet() <br>{ <br> // TODO メソッド スタブを自動的に生成します <br> return ( this.encode); <br>} <br><br>} <br><br>/ ** <br>* テスト <br>* <br>* @parameter ARGS <br>* / <br> public static valid main(String[] args) <br>{ <br>//System.setProperty("http .proxyHost", "165.228.128.10"); <br>//System.setProperty("http.proxyPort", "3128"); <br> //System.setProperty("http.proxySet","true"); <br><br><br> String reqUrl = " http://news.39.net/jbyw/index.html "; <br>reqUrl = " http:// news.39.net/a/2010722/1404231.html ”; <br>Map<string string hashmap>(); <br>headers.put("エンコーディングを受け入れる" , "gzip,deflate"); <br><br>HttpClient = getHttpClient();ヘッダー、null、"GBK"); <br>System.out.println(htmlContent);</string>

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
c#.netの継続的な関連性:現在の使用法を見るc#.netの継続的な関連性:現在の使用法を見るApr 16, 2025 am 12:07 AM

C#.NETは、複数のアプリケーション開発をサポートする強力なツールとライブラリを提供するため、依然として重要です。 1)C#は.NETフレームワークを組み合わせて、開発を効率的かつ便利にします。 2)C#のタイプの安全性とゴミ収集メカニズムは、その利点を高めます。 3).NETは、クロスプラットフォームの実行環境とリッチAPIを提供し、開発の柔軟性を向上させます。

Webからデスクトップまで:C#.NETの汎用性Webからデスクトップまで:C#.NETの汎用性Apr 15, 2025 am 12:07 AM

c#.netisversatileforbothwebanddesktopdevelopment.1)forweb、useasp.netfordynamicapplications.2)fordesktop、equindowsorwpfforrichinterfaces.3)usexamarinforcross-platformdeveliment、enabling deshacrosswindows、

c#.net and the Future:新しいテクノロジーへの適応c#.net and the Future:新しいテクノロジーへの適応Apr 14, 2025 am 12:06 AM

C#と.NETは、継続的な更新と最適化を通じて、新しいテクノロジーのニーズに適応します。 1)C#9.0および.NET5は、レコードタイプとパフォーマンスの最適化を導入します。 2).Netcoreは、クラウドネイティブおよびコンテナ化されたサポートを強化します。 3)ASP.Netcoreは、最新のWebテクノロジーと統合されています。 4)ML.NETは、機械学習と人工知能をサポートしています。 5)非同期プログラミングとベストプラクティスはパフォーマンスを改善します。

c#.netはあなたにぴったりですか?その適用性の評価c#.netはあなたにぴったりですか?その適用性の評価Apr 13, 2025 am 12:03 AM

c#.netissuitableforenterprise-levelApplicationsとsystemduetoitsSystemdutyping、richlibraries、androbustperformance.

.NET内のC#コード:プログラミングプロセスの調査.NET内のC#コード:プログラミングプロセスの調査Apr 12, 2025 am 12:02 AM

.NETでのC#のプログラミングプロセスには、次の手順が含まれます。1)C#コードの作成、2)中間言語(IL)にコンパイルし、3).NETランタイム(CLR)によって実行される。 .NETのC#の利点は、デスクトップアプリケーションからWebサービスまでのさまざまな開発シナリオに適した、最新の構文、強力なタイプシステム、および.NETフレームワークとの緊密な統合です。

C#.NET:コアの概念とプログラミングの基礎を探るC#.NET:コアの概念とプログラミングの基礎を探るApr 10, 2025 am 09:32 AM

C#は、Microsoftによって開発された最新のオブジェクト指向プログラミング言語であり、.NETフレームワークの一部として開発されています。 1.C#は、カプセル化、継承、多型を含むオブジェクト指向プログラミング(OOP)をサポートしています。 2。C#の非同期プログラミングは非同期を通じて実装され、適用応答性を向上させるためにキーワードを待ちます。 3. LINQを使用してデータ収集を簡潔に処理します。 4.一般的なエラーには、null参照の例外と、範囲外の例外インデックスが含まれます。デバッグスキルには、デバッガーと例外処理の使用が含まれます。 5.パフォーマンスの最適化には、StringBuilderの使用と、不必要な梱包とボクシングの回避が含まれます。

テストC#.NETアプリケーション:ユニット、統合、およびエンドツーエンドテストテストC#.NETアプリケーション:ユニット、統合、およびエンドツーエンドテストApr 09, 2025 am 12:04 AM

C#.NETアプリケーションのテスト戦略には、ユニットテスト、統合テスト、エンドツーエンドテストが含まれます。 1.単位テストにより、コードの最小ユニットがMSTEST、ヌニット、またはXUNITフレームワークを使用して独立して動作することを保証します。 2。統合テストでは、一般的に使用されるシミュレートされたデータと外部サービスを組み合わせた複数のユニットの機能を検証します。 3.エンドツーエンドのテストでは、ユーザーの完全な操作プロセスをシミュレートし、通常、セレンは自動テストに使用されます。

高度なC#.NETチュートリアル:次のシニア開発者インタビューをエース高度なC#.NETチュートリアル:次のシニア開発者インタビューをエースApr 08, 2025 am 12:06 AM

C#シニア開発者とのインタビューでは、非同期プログラミング、LINQ、.NETフレームワークの内部作業原則などのコア知識をマスターする必要があります。 1.非同期プログラミングは、非同期を通じて操作を簡素化し、アプリケーションの応答性を向上させるのを待ちます。 2.LinqはSQLスタイルでデータを操作し、パフォーマンスに注意を払います。 3.ネットフレームワークのCLRはメモリを管理し、ガベージコレクションに注意して使用する必要があります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい