Exemple #1
0
 /// <summary>
 /// API请求
 /// </summary>
 /// <param name="url">请求地址</param>
 /// <param name="encoding">请求地址</param>
 /// <param name="form">POST表单内容</param>
 /// <param name="uploadData"></param>
 /// <returns>返回内容,失败为null</returns>
 public string Request(string url, Encoding encoding, NameValueCollection form = null, byte[] uploadData = null)
 {
     webClient.request request = new net.webClient.request
     {
         Uri           = new Uri(url),
         Form          = form,
         UploadData    = uploadData,
         IsErrorOut    = true,
         IsErrorOutUri = true
     };
     Monitor.Enter(webClientLock);
     try
     {
         return(webClient.CrawlHtml(ref request, encoding));
     }
     finally { Monitor.Exit(webClientLock); }
 }
Exemple #2
0
        /// <summary>
        /// API请求
        /// </summary>
        /// <param name="url">请求地址</param>
        /// <param name="encoding">请求地址</param>
        /// <param name="data">文件数据</param>
        /// <param name="filename">文件名称</param>
        /// <param name="extensionName">扩展名称</param>
        /// <param name="form">表单数据</param>
        /// <returns>返回内容,失败为null</returns>
        public unsafe string Upload(string url, Encoding encoding, byte[] data, string filename, string extensionName, keyValue <byte[], byte[]>[] form)
        {
            string header = "multipart/form-data; boundary=----fastCSharpBoundary" + ((ulong)date.Now.Ticks).toHex16();

            byte[] contentType;
            int    size = 40 + contentDispositionData.Length + filename.Length + filenameData.Length + filename.Length + data.Length + 46 + form.Length * (contentDispositionData.Length + 5 + 42);

            if (extensionName != null)
            {
                contentType = fastCSharp.web.contentTypeInfo.GetContentType(extensionName, null);
                size       += extensionName.Length + 1;
            }
            else
            {
                contentType = null;
            }
            if (contentType == null)
            {
                size += 5;
            }
            else
            {
                size += contentTypeData.Length + contentType.Length + 4;
            }
            foreach (keyValue <byte[], byte[]> keyValue in form)
            {
                size += keyValue.Key.Length + keyValue.Value.Length;
            }
            byte[] body = new byte[size];
            fixed(byte *bodyFixed = body)
            {
                *(short *)(bodyFixed) = (short)('-' + ('-' << 8));
                byte *write = bodyFixed + sizeof(short);

                fixed(char *headerFixed = header)
                {
                    for (char *start = headerFixed + 30, end = start + 38; start != end; *write++ = (byte)*start++)
                    {
                        ;
                    }
                }

                foreach (keyValue <byte[], byte[]> keyValue in form)
                {
                    fastCSharp.unsafer.memory.Copy(contentDispositionData, write, contentDispositionData.Length);
                    write += contentDispositionData.Length;
                    if (keyValue.Key.Length != 0)
                    {
                        fastCSharp.unsafer.memory.UnsafeSimpleCopy(keyValue.Key, write, keyValue.Key.Length);
                        write += keyValue.Key.Length;
                    }
                    *write++ = (byte)'"';
                    *(int *)write = 0x0a0d0a0d;
                    fastCSharp.unsafer.memory.Copy(keyValue.Value, write += sizeof(int), keyValue.Value.Length);
                    write          += keyValue.Value.Length;
                    *(short *)write = 0x0a0d;
                    write          += sizeof(short);
                    fastCSharp.unsafer.memory.UnsafeSimpleCopy(bodyFixed, write, 40);
                    write += 40;
                }
                fastCSharp.unsafer.memory.Copy(contentDispositionData, write, contentDispositionData.Length);
                write += contentDispositionData.Length;
                fixed(char *filenameFixed = filename)
                {
                    for (char *start = filenameFixed, end = filenameFixed + filename.Length; start != end; *write++ = (byte)*start++)
                    {
                        ;
                    }
                    if (filenameData.Length != 0)
                    {
                        fastCSharp.unsafer.memory.UnsafeSimpleCopy(filenameData, write, filenameData.Length);
                        write += filenameData.Length;
                    }
                    for (char *start = filenameFixed, end = filenameFixed + filename.Length; start != end; *write++ = (byte)*start++)
                    {
                        ;
                    }
                }

                if (extensionName != null)
                {
                    *write++ = (byte)'.';
                    fixed(char *extensionNameFixed = extensionName)
                    {
                        for (char *start = extensionNameFixed, end = extensionNameFixed + extensionName.Length; start != end; *write++ = (byte)*start++)
                        {
                            ;
                        }
                    }
                }
                if (contentType == null)
                {
                    *write++ = (byte)'"';
                }
                else
                {
                    if (contentTypeData.Length != 0)
                    {
                        fastCSharp.unsafer.memory.UnsafeSimpleCopy(contentTypeData, write, contentTypeData.Length);
                        write += contentTypeData.Length;
                    }
                    if (contentType.Length != 0)
                    {
                        fastCSharp.unsafer.memory.UnsafeSimpleCopy(contentType, write, contentType.Length);
                        write += contentType.Length;
                    }
                }
                *(int *)write = 0x0a0d0a0d;
                write        += sizeof(int);
                fastCSharp.unsafer.memory.Copy(data, write, data.Length);
                write          += data.Length;
                *(short *)write = 0x0a0d;
                write          += sizeof(short);
                fastCSharp.unsafer.memory.UnsafeSimpleCopy(bodyFixed, write, 40);
                *(int *)(write + 40) = (int)('-' + ('-' << 8) + 0x0a0d0000);
            }

            webClient.request request = new net.webClient.request
            {
                Uri           = new Uri(url),
                UploadData    = body,
                IsErrorOut    = true,
                IsErrorOutUri = true
            };
            Monitor.Enter(webClientLock);
            try
            {
                webClient.Headers.Add(fastCSharp.web.header.ContentType, header);
                return(webClient.CrawlHtml(ref request, encoding));
            }
            finally { Monitor.Exit(webClientLock); }
        }