利用http上传文件(关于RFC1867的使用小结)

来源:百度文库 编辑:神马文学网 时间:2024/05/01 11:22:32
工作需要,给**上传文件根本不了解,一直在请求**,没做过上传的事情,原来还可以put和post上去(标准的说应该是有:PUT、WEBDAV、RFC1867,三种方法)结果人家网站用RFC1867
视频上传过程:1.post或get方法(一般post)在服务器上“注册”一个位置,通过返回信息sessionid videoid 。。。。进一步的上传文件;2.通过http的rfc1867这个协议,此协议在http上扩充了一个MIME体,相当于在content部分又封装了一个包。。。通过由1,获取到的信息,组成一个request包(通常有cookie),post或者put到web server上,包结构大概如下:
POST /asfdasdf HTTP1.1\r\nHOST: asdfasdf\r\n.....Content-Type: multipart/form-data; boundary="boundary_text"\r\nContent-Length: 123456\r\n
\r\n--boundary_text\r\nContent-Disposition:form-data;........\r\n\r\ncontent1.......\r\n--boundary_text\r\nContent-Disposition:form-data;........\r\n\r\ncontent2........\r\n--boundary_text\r\nContent-Disposition:form-data;........\r\n\r\nlastcontent....\r\n--boundary_text--\r\n
其中,MIME体的content-desposition部分的属性有很多,其他的不了解。
3.cs程序编写用过webclient、httprequest,都有缺陷,最后自己用socket写了一个组发收包的方法,用着还好。
webclient的缺陷是,它能上传,但有一个100s的超时,没法改,比较杯具(网上有些改法,没用过,不知好不好用);
httprequest:不算缺憾吧,httprequest的协议版本(rfc2616)对有些网站支持不好(rfc2068),据说rfc2616的方式是把data发完,等待server返回http 100,才把data真正发完。而rfc2068不等,直接发完回家。所以用httprequest的结果是,本来看似文件已经发完,却阻塞在getResponse()上,知道超时。http://bytes.com/topic/c-sharp/answers/228437-httpwebresponses-getresponse-hangs-timeouts
mark