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

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

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