protected FBytes Build() { FBytes bytes = new FBytes(); FString line = new FString(); // Protocol if (RString.IsEmpty(_method)) { if (_values.IsEmpty) { line.Append("GET "); } else { line.Append("POST "); } } else { line.Append(_method); line.Append(" "); } if (_connection.UseProxy) { line.Append(_connection.Url.ToString()); } else { if (RString.IsEmpty(_connection.Url.Path)) { line.Append("/"); } else { line.Append(_connection.Url.Path); } } line.Append(" HTTP/1.1\r\n"); // Values FString value = new FString(); if (!_values.IsEmpty) { int count = _values.Count; for (int n = 0; n < count; n++) { if (n != 0) { value.Append('&'); } value.Append(_values.Name(n)); value.Append('='); value.Append(_values.Value(n)); } _heads["Content-Length"] = value.Length.ToString(); } bytes.Append(line.ToBytes(Encoding.ASCII)); // Heads if (!_heads.IsEmpty) { int count = _heads.Count; for (int n = 0; n < count; n++) { line.Clear(); line.Append(_heads.Name(n)); line.Append(": "); line.Append(_heads.Value(n)); line.Append("\r\n"); bytes.Append(line.ToBytes(Encoding.ASCII)); } } /*// Host Fix * if (!_heads.Contains("Host")) { * line.Clear(); * line.Append("Host: "); * line.Append(_connection.Url.Host); * line.Append("\r\n"); * bytes.Append(line.ToBytes(Encoding.ASCII)); * }*/ // Make line.Clear(); line.Append("\r\n"); bytes.Append(line.ToBytes(Encoding.ASCII)); if (!_values.IsEmpty) { bytes.Append(value.ToBytes(Encoding.ASCII)); } line.Append("\r\n"); return(bytes); }