本文整理汇总了C#中Header.GetVal方法的典型用法代码示例。如果您正苦于以下问题:C# Header.GetVal方法的具体用法?C# Header.GetVal怎么用?C# Header.GetVal使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Header
的用法示例。
在下文中一共展示了Header.GetVal方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: TotalTest
public void TotalTest()
{
const int max = 5;
var sb = new StringBuilder();
for (int i = 0; i < max; i++) {
sb.Append(string.Format("key_{0:D3}: val_{0:D3}\r\n", i));
}
byte [] buf = Bytes.Create(sb.ToString());
var header = new Header(buf);
//GetBytes()
//自動的に追加される空行を追加すると、初期化したbyte[]と同じになるはず
var tmp = Bytes.Create(header.GetBytes(),"\r\n");
for (int i=0;i<buf.Length;i++) {
Assert.AreEqual(buf[i],tmp[i]);
}
//Count
Assert.AreEqual(header.Count,max);
for(var i=0;i<header.Count;i++){
var key = string.Format("key_{0:D3}",i);
var valStr = string.Format("val_{0:D3}",i);
//GetVal(string key)
Assert.AreEqual(header.GetVal(key), valStr);
//Replace(string key,string str)
var replaceStr = string.Format("replace_{0:D3}",i);
header.Replace(key,replaceStr);
Assert.AreEqual(header.GetVal(key), replaceStr);
}
const int appendMax = 3;
for (int i = 0; i < appendMax; i++) {
//Append(string key,string val)
var key = string.Format("AppendKey_{0:D3}", i);
var val = string.Format("AppendVal_{0:D3}", i);
header.Append(key, Encoding.ASCII.GetBytes(val));
//string s = header.GetVal(key);
Assert.AreEqual(header.GetVal(key), val);
}
Assert.AreEqual(header.Count, max + appendMax);
}
示例2: Reception
public Reception(byte[] buf)
{
//とりあえず、エラーを返せるように全てを初期化する
Body = new List<byte[]>();
Header = new Header();
StartLine = new StartLine(null);
var lines = Inet.GetLines(buf);
if (lines.Count == 0){
return; //スタートラインが存在しない
}
StartLine = new StartLine(lines[0]);
if (StartLine.ReceptionKind == ReceptionKind.Unknown) {
return; //スタートラインが無効な場合、これ以降の処理を行わない
}
//ヘッダ初期化
var header = new List<byte[]>();
var i = 1; //処理対象の行をカウントする
for (; i < lines.Count; i++){
if (lines[i].Length == 2 && lines[i][0] == '\r' && lines[i][1] == '\n'){
//改行のみの行
i++;
break;
}
header.Add(lines[i]);
}
//ヘッダ初期化
Header = new Header(header);
//ボディ初期化
var contentLength = Header.GetVal("Content-Length");
if (contentLength == "0")
return;
for (;i<lines.Count;i++) {
Body.Add(lines[i]);
}
}
示例3: Add
public void Add(Header header, byte[] body)
{
//ドキュメントのLast-Modifiedを記録する
string str = header.GetVal("Last-Modified");
if (str != null) {
LastModified = Util.Str2Time(str);
}
//ドキュメントのExpiresを記録する
str = header.GetVal("Expires");
if (str != null) {
Expires = Util.Str2Time(str);
}
//Headerへのコピー
Header = new Header(header);
//Bodyへのコピー
Body = new byte[body.Length];
Buffer.BlockCopy(body, 0, Body, 0, body.Length);
}
示例4: CheckUri
//********************************************************
//URIを点検して不正な場合はエラーコードを返す
//return 200 エラーなし
//********************************************************
int CheckUri(SockTcp sockTcp, Request request, Header recvHeader)
{
var responseCode = 200;
// v2.3.1 Uri の1文字目が/で無い場合
if (request.Uri[0] != '/') {
responseCode = 400;
//Uriの最後に空白が入っている場合
} else if (request.Uri[request.Uri.Length - 1] == (' ') || request.Uri[request.Uri.Length - 1] == ('.')) {
responseCode = 404;
// ./の含まれるリクエストは404で落とす
// %20/の含まれるリクエストは404で落とす
} else if ((0 <= request.Uri.IndexOf("./")) || (0 <= request.Uri.IndexOf(" /"))) {
responseCode = 404;
// HTTP1.1でhostヘッダのないものはエラー
} else if (request.Ver == "HTTP/1.1" && recvHeader.GetVal("Host") == null) {
responseCode = 400;
// ..を参照するパスの排除
} else if (!(bool)Conf.Get("useDot") && 0 <= request.Uri.IndexOf("..")) {
Logger.Set(LogKind.Secure,sockTcp,13,"URI=" + request.Uri);//.. が含まれるリクエストは許可されていません。
responseCode = 403;
}
return responseCode;
}
示例5: OnSubThread
//接続単位の処理
protected override void OnSubThread(SockObj sockObj)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
var sockTcp = (SockTcp)sockObj;
var remoteIp = sockTcp.RemoteIp;
//opBase 及び loggerはバーチャルホストで変更されるので、
//このポインタを初期化に使用できない
bool keepAlive = true;//レスポンスが終了したとき接続を切断しないで継続する
//1回目の通信でバーチャルホストの検索を実施する
var checkVirtual = true;
var request = new Request(Logger,sockTcp);//リクエストライン処理クラス
//受信ヘッダ
var recvHeader = new Header();
//Ver5.1.x
string urlStr = null;//http://example.com
//接続が継続している間は、このループの中にいる(継続か否かをkeepAliveで保持する)
//「continue」は、次のリクエストを待つ 「break」は、接続を切断する事を意味する
WebStream inputStream = null;
var outputStream = new WebStream(-1);
while (keepAlive && IsLife()) {
int responseCode;
//***************************************************************
// ドキュメント生成クラスの初期化
//***************************************************************
var contentType = new ContentType(Conf);
var document = new Document(Kernel, Logger, Conf, sockTcp, contentType);
var authrization = new Authorization(Conf, Logger);
var authName = "";
//***************************************************************
//データ取得
//***************************************************************
//リクエスト取得
//ここのタイムアウト値は、大きすぎるとブラウザの切断を取得できないでブロックしてしまう
var requestStr = sockTcp.AsciiRecv(Timeout, this);
if (requestStr == null)
break;
//\r\nの削除
requestStr = Inet.TrimCrlf(requestStr);
//Ver5.8.8 リクエストの解釈に失敗した場合に、処理を中断する
//request.Init(requestStr);
if (!request.Init(requestStr)){
break;
}
//ヘッダ取得(内部データは初期化される)
if (!recvHeader.Recv(sockTcp,(int)Conf.Get("timeOut"),this))
break;
{
//Ver5.1.x
var hostStr = recvHeader.GetVal("host");
urlStr = hostStr==null ? null : string.Format("{0}://{1}",(ssl != null)?"https":"http",hostStr);
}
//入力取得(POST及びPUTの場合)
var contentLengthStr = recvHeader.GetVal("Content-Length");
if(contentLengthStr != null) {
try{
//max,lenはともにlong
var max = Convert.ToInt64(contentLengthStr);
if(max!=0){//送信データあり
inputStream = new WebStream((256000<max)?-1:(int)max);
var errorCount = 0;
while(inputStream.Length<max && IsLife()){
var len = max - inputStream.Length;
if (len > 51200000) {
len = 51200000;
}
var b = sockTcp.Recv((int)len, (int)Conf.Get("timeOut"),this);
if (!inputStream.Add(b)) {
errorCount++;//エラー蓄積
Logger.Set(LogKind.Error, null, 41, string.Format("content-Length={0} Recv={1}", max, inputStream.Length));
} else {
errorCount = 0;//初期化
}
Logger.Set(LogKind.Detail, null,38, string.Format("Content-Length={0} {1}bytes Received.", max, inputStream.Length));
if (errorCount > 5){//5回連続して受信が無かった場合、サーバエラー
responseCode = 500;
goto SEND;//サーバエラー
}
Thread.Sleep(10);
}
Logger.Set(LogKind.Detail, null, 39, string.Format("Content-Length={0} {1}bytes", max, inputStream.Length));
}
//.........这里部分代码省略.........
示例6: Env
//.........这里部分代码省略.........
_ar.Add(new OneEnv("SystemRoot", Environment.GetEnvironmentVariable("SystemRoot")));
_ar.Add(new OneEnv("Path", Environment.GetEnvironmentVariable("Path")));
//Ver5.6.2追加
_ar.Add(new OneEnv("COMSPEC", Environment.GetEnvironmentVariable("COMSPEC")));
_ar.Add(new OneEnv("PATHEXT", Environment.GetEnvironmentVariable("PATHEXT")));
_ar.Add(new OneEnv("WINDIR", Environment.GetEnvironmentVariable("windir")));
_ar.Add(new OneEnv("SERVER_SOFTWARE", string.Format("{0}/{1} (Windows)", Define.ApplicationName(), kernel.Ver.Version())));
_ar.Add(new OneEnv("REQUEST_METHOD", request.Method.ToString().ToUpper()));
_ar.Add(new OneEnv("REQUEST_URI", request.Uri));
if (request.Uri == "/") { // ルートディレクトリか?
_ar.Add(new OneEnv("SCRIPT_NAME", Path.GetFileName(fileName))); // Welcomeファイルを設定する
} else { // URIで指定されたCGIを設定する
_ar.Add(new OneEnv("SCRIPT_NAME", request.Uri));
}
_ar.Add(new OneEnv("SERVER_PROTOCOL", request.Ver));
_ar.Add(new OneEnv("QUERY_STRING", request.Param));
_ar.Add(new OneEnv("REMOTE_HOST", tcpObj.RemoteHostname));
//Ver5.6.2
//ar.Add(new OneEnv("REMOTE_ADDR", tcpObj.RemoteAddr.IPAddress.ToString()));
var addr = (tcpObj.RemoteAddress != null) ? tcpObj.RemoteAddress.Address.ToString() : "";
_ar.Add(new OneEnv("REMOTE_ADDR", addr));
//Ver5.6.2
int port = (tcpObj.RemoteAddress!=null)?tcpObj.RemoteAddress.Port:0;
_ar.Add(new OneEnv("REMOTE_PORT", port.ToString()));
port = (tcpObj.LocalAddress != null) ? tcpObj.LocalAddress.Port : 0;
_ar.Add(new OneEnv("SERVER_PORT", port.ToString()));
addr = (tcpObj.LocalAddress != null) ? tcpObj.LocalAddress.Address.ToString() : "";
_ar.Add(new OneEnv("SERVER_ADDR", addr));
//Ver5.6.2
SetEnvValue(recvHeader, _ar, "accept-charset", "HTTP_ACCEPT_CHARSET");
SetEnvValue(recvHeader, _ar, "accept-encoding", "HTTP_ACCEPT_ENCODING");
SetEnvValue(recvHeader, _ar, "accept-language", "HTTP_ACCEPT_LANGUAGE");
SetEnvValue(recvHeader, _ar, "User-Agent", "HTTP_USER_AGENT");
SetEnvValue(recvHeader, _ar, "Content-Type", "CONTENT_TYPE");
SetEnvValue(recvHeader, _ar, "host", "SERVER_NAME");
SetEnvValue(recvHeader, _ar, "Content-Length", "CONTENT_LENGTH");
SetEnvValue(recvHeader, _ar, "AuthUser", "REMOTE_USER");
//PathInfo/PathTranslatedの取得と環境変数へのセットについて再考察
SetEnvValue(recvHeader, _ar, "PathInfo", "PATH_INFO");
SetEnvValue(recvHeader, _ar, "PathTranslated", "PATH_TRANSLATED");
_ar.Add(new OneEnv("SCRIPT_FILENAME", fileName));
//HTTP_で環境変数をセットしないヘッダの(除外)リスト
var exclusionList = new List<string>{
"accept-charset",
"accept-encoding",
"accept-language",
"authorization",
"content-length",
"content-type",
"date",
"expires",
"from",
"host",
"if-modified-since",
"if-match",
"if-none-match",
"if-range",
"if-unmodified-since",
"last-modified",
"pragma",
"range",
"remote-user",
"remote-host-wp",
"transfer-encoding",
"upgrade",
"user-agent"
};
//Ver5.6.2
//exclusionList.Add("connection");
//DEBUG
//recvHeader.Append("accept", Encoding.ASCII.GetBytes("ABC"));
foreach (var line in recvHeader) {
//取得したタグが除外リストにヒットしない場合
//HTTP_を付加して環境変数にセットする
if (exclusionList.IndexOf(line.Key.ToLower()) < 0) {
//5.5.4重複による例外を回避
//ar.Add("HTTP_" + line.Key.ToUpper(), recvHeader.GetVal(line.Key));
var tag = "HTTP_" + line.Key.ToUpper();
//if (null == ar[tag]) {
// ar.Add(tag, recvHeader.GetVal(line.Key));
//}
bool find = _ar.Any(a => a.Key == tag);
if(!find){
_ar.Add(new OneEnv(tag, recvHeader.GetVal(line.Key)));
}
}
}
}
示例7: SetEnvValue
//***************************************************
//環境変数の設定
//***************************************************
//void SetEnvValue(Header recvHeader, StringDictionary env, string headerTag, string envTag) {
// string value = recvHeader.GetVal(headerTag);
// if (value != null)
// env.Add(envTag, value);
//}
//***************************************************
//環境変数の設定
//***************************************************
void SetEnvValue(Header recvHeader, List<OneEnv> env, string headerTag, string envTag)
{
string value = recvHeader.GetVal(headerTag);
if (value != null)
env.Add(new OneEnv(envTag, value));
}