コード例 #1
0
        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);
        }