C# HttpWebRequest Post上传图片问题

问题描述

C#语言winform做模拟登陆到微信公众平台进行图片上传,图片上传返回的是{"base_resp":{"ret":-2,"err_msg":"invalidargs"}}上传失败,微信公众平台获取如下:RemoteAddress:101.226.68.61:443RequestURL:https://mp.weixin.qq.com/cgi-bin/filetransfer?action=upload_material&f=json&ticket_id=NicSnow&ticket=5c797e3a8d6db1b5af81078f99e77a97467c7fd7&token=1263014585&lang=zh_CNRequestMethod:POSTStatusCode:200OKRequestHeadersviewsourceAccept:*/*Accept-Encoding:gzip,deflate,sdchAccept-Language:zh-CN,zh;q=0.8Connection:keep-aliveContent-Length:3332Content-Type:multipart/form-data;boundary=----------Ef1ae0ei4gL6gL6ae0GI3gL6KM7ae0Cookie:remember_acct=626617118%40qq.com;_gscu_661903259=03504420e7ugzy19;piao_city=125;pgv_pvi=1019938816;RK=xZ1vcoKQGo;ts_refer=www.baidu.com/s;ts_uid=8409079640;lv_irt_id=e9a87a2c315e80da14e4ccac5f33ca3a;ptui_loginuin=1139232377;qqB_short=1;isVideo_DC=0;pgv_info=ssid=s2537644878;pgv_pvid=8069529924;o_cookie=626617118;pt2gguin=o0626617118;uin=o0626617118;skey=@zXGxVBSM9;ptisp=ctc;ptcz=712ee3482f231aae599407a5cf37d4aecafb443808a38ce7cf5a0635be3047a3;data_bizuin=2398190748;data_ticket=AgU54xCIhpkULXiAfcqE/uXt;remember_acct=626617118%40qq.com;slave_user=gh_d40b9f0c3bd9;slave_sid=MlpkdlllemVFaFhUcnFDZ3FXUlBacWgwdFhTV0lqZlVISlhOY2FWQ2lnVHBDbW1qS25xblZVTnBybXN1TGtZN2I2bmVIWmtfVHg5RDRjODVrOVl0WHM2SzVNYU5aWkNEekxiUnAxT2VIQ1kwV29ZZkRUbnlzdTdpK2w2T2xGM2w=;bizuin=3097552336Host:mp.weixin.qq.comOrigin:https://mp.weixin.qq.comReferer:https://mp.weixin.qq.com/cgi-bin/filepage?type=2&begin=0&count=20&t=media/list&token=1263014585&lang=zh_CNUser-Agent:Mozilla/5.0(WindowsNT6.2;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/36.0.1985.143Safari/537.36QueryStringParametersviewparsedaction=upload_material&f=json&ticket_id=NicSnow&ticket=5c797e3a8d6db1b5af81078f99e77a97467c7fd7&token=1263014585&lang=zh_CNRequestPayload------------Ef1ae0ei4gL6gL6ae0GI3gL6KM7ae0Content-Disposition:form-data;name="Filename"no.gif------------Ef1ae0ei4gL6gL6ae0GI3gL6KM7ae0Content-Disposition:form-data;name="folder"/cgi-bin/uploads------------Ef1ae0ei4gL6gL6ae0GI3gL6KM7ae0Content-Disposition:form-data;name="file";filename="no.gif"Content-Type:application/octet-stream------------Ef1ae0ei4gL6gL6ae0GI3gL6KM7ae0Content-Disposition:form-data;name="Upload"SubmitQuery------------Ef1ae0ei4gL6gL6ae0GI3gL6KM7ae0--ResponseHeadersviewsourceContent-Length:96Content-Type:application/json;charset=UTF-8代码如下:stringurl="https://mp.weixin.qq.com/cgi-bin/filetransfer";stringparam="action=upload_material&f=json&ticket_id=NicSnow&ticket=f438982cc1892b478d1d64275db91d106190a05b&token="+WeiXinLogin.LoginInfo.Token+"&lang=zh_CN";stringfileformname="file";stringfilepath=@"F:no.gif";stringfilename="no.gif";stringrefre="https://mp.weixin.qq.com/cgi-bin/filepage?type=2&begin=0&count=20&t=media/list&token="+WeiXinLogin.LoginInfo.Token+"&lang=zh_CN";stringboundary="----------Zf1ae0ei4gL6gL6ae0GI3gL6KM7ae0";HttpWebRequestwebrequest=(HttpWebRequest)WebRequest.Create(url);webrequest.ContentType="multipart/form-data;boundary="+boundary;webrequest.Method="POST";//webrequest.Headers.Add("Cookie:"+WeiXinLogin.LoginInfo.LoginCookie);webrequest.CookieContainer=WeiXinLogin.LoginInfo.LoginCookie;webrequest.Referer=refre;FileStreamfileStream=newFileStream(filepath,FileMode.Open,FileAccess.Read);byte[]paramBytes=Encoding.UTF8.GetBytes(param);StringBuildersb=newStringBuilder();sb.Append("--"+boundary+"rn");sb.Append("Content-Disposition:form-data;name="Filename"rn");sb.Append("rn");sb.Append("no.gifrn");sb.Append("--"+boundary+"rn");sb.Append("Content-Disposition:form-data;name="folder"rn");sb.Append("rn");sb.Append("/cgi-bin/uploadsrn");sb.Append("--"+boundary+"rn");sb.Append("Content-Disposition:form-data;name="file";filename="no.gif"rn");sb.Append("Content-Type:application/octet-streamrn");sb.Append("rn");sb.Append("--"+boundary+"rn");sb.Append("Content-Disposition:form-data;name="Upload"rn");sb.Append("rn");sb.Append("SubmitQueryrn");sb.Append("--"+boundary+"--");stringrequestpayload=sb.ToString();byte[]payloadBytes=Encoding.UTF8.GetBytes(requestpayload);byte[]buffer=newByte[checked((uint)Math.Min(4096,(int)fileStream.Length))];webrequest.ContentLength=buffer.Length+paramBytes.Length+payloadBytes.Length;StreamnewStream=webrequest.GetRequestStream();//intbytesRead=0;//while((bytesRead=fileStream.Read(buffer,0,buffer.Length))!=0)newStream.Write(paramBytes,0,paramBytes.Length);newStream.Write(payloadBytes,0,payloadBytes.Length);newStream.Write(buffer,0,buffer.Length);newStream.Close();HttpWebResponseresponse2=(HttpWebResponse)webrequest.GetResponse();StreamReadersr2=newStreamReader(response2.GetResponseStream(),Encoding.Default);returnsr2.ReadToEnd();

解决方案

解决方案二:
把你的这段代码FileStreamfileStream=newFileStream(filepath,FileMode.Open,FileAccess.Read);byte[]paramBytes=Encoding.UTF8.GetBytes(param);StringBuildersb=newStringBuilder();sb.Append("--"+boundary+"rn");sb.Append("Content-Disposition:form-data;name="Filename"rn");sb.Append("rn");sb.Append("no.gifrn");sb.Append("--"+boundary+"rn");sb.Append("Content-Disposition:form-data;name="folder"rn");sb.Append("rn");sb.Append("/cgi-bin/uploadsrn");sb.Append("--"+boundary+"rn");sb.Append("Content-Disposition:form-data;name="file";filename="no.gif"rn");sb.Append("Content-Type:application/octet-streamrn");sb.Append("rn");sb.Append("--"+boundary+"rn");sb.Append("Content-Disposition:form-data;name="Upload"rn");sb.Append("rn");sb.Append("SubmitQueryrn");sb.Append("--"+boundary+"--");stringrequestpayload=sb.ToString();byte[]payloadBytes=Encoding.UTF8.GetBytes(requestpayload);byte[]buffer=newByte[checked((uint)Math.Min(4096,(int)fileStream.Length))];webrequest.ContentLength=buffer.Length+paramBytes.Length+payloadBytes.Length;StreamnewStream=webrequest.GetRequestStream();//intbytesRead=0;//while((bytesRead=fileStream.Read(buffer,0,buffer.Length))!=0)newStream.Write(paramBytes,0,paramBytes.Length);newStream.Write(payloadBytes,0,payloadBytes.Length);newStream.Write(buffer,0,buffer.Length);newStream.Close();

改成下面的代码FileStreamfileStream=newFileStream(filepath,FileMode.Open,FileAccess.Read);byte[]buffer=newbyte[fileStream.Length];fileStream.Read(buffer,0,buffer.Length);fileStream.Close();webrequest.ContentLength=buffer.Length;StreamnewStream=webrequest.GetRequestStream();newStream.Write(buffer,0,buffer.Length);newStream.Close();

解决方案三:
@sunny906改了但是还是一样参数无效

时间: 2024-09-12 04:59:47

C# HttpWebRequest Post上传图片问题的相关文章

尝试通过HttpWebRequest向TAOBAO批量发布商品及上传图片

朋友开了个淘宝店,所以经常要将新商品及图片发布到网店里,而且有时还需要上传很多商品.如果手工一条一个商品的上传未免太花时间,所以我就琢磨着能否用WinForm写个程序通过WebRequest发送POST/GET请求来达到这个目的.由于上传上品时即有普通的Form字段信息需要提交,还需要上传图片,所以在写HttpWebRequest时参考了这个帖子http://bytes.com/topic/c-sharp/answers/268661-how-upload-file-via-c-code(How

艾伟_转载:尝试通过HttpWebRequest向TAOBAO批量发布商品及上传图片

朋友开了个淘宝店,所以经常要将新商品及图片发布到网店里,而且有时还需要上传很多商品.如果手工一条一个商品的上传未免太花时间,所以我就琢磨着能否用WinForm写个程序通过WebRequest发送POST/GET请求来达到这个目的.由于上传上品时即有普通的Form字段信息需要提交,还需要上传图片,所以在写HttpWebRequest时参考了这个帖子http://bytes.com/topic/c-sharp/answers/268661-how-upload-file-via-c-code(How

C# winform 向服务器Post请求上传图片 图片以byte[ ] 的流的形式传入

问题描述 这个是我写的post请求,接口没问题,数据格式也对,但是就是得不到响应,请求的时候服务器端没有响应///<summary>///向服务器Post请求上传图片///</summary>///<paramname="upload_url">请求地址http://192.168.0.666:8080/aaa/uploadByPc.do</param>///<paramname="id">项目索引<

HttpWebRequest连接数问题

问题描述 近期项目采用客户端HttpWebRequest和PUT,服务端重写IHttpHandler实现上传图片和自定义保存的功能.但是发现在客户端使用for循环进行多个文件上传时(上传函数为uploadmedia),仅有一个文件可以上传成功,其余的无法上传,但也没有异常.如果在for循环中,每次调用完uploadmedia,调用System.Threading.Thread.Sleep(1000);就可以成功传完多个文件,并且sleep的时间值我试过,10和100毫秒都不行.有种说法是ms有对

asp.net开发微信公众平台通过接口上传图片到微信服务器后台

问题描述 asp.net开发微信公众平台通过接口上传图片到微信服务器后台 asp.net开发微信公众平台通过接口上传图片到微信服务器后台,就要代码. ASCIIEncoding encodings = new ASCIIEncoding(); HttpWebResponse webResponses = null; string s = zone.Substring(0, zone.Length - 1); s = s.Substring(1, s.Length - 1); string img

关于 HttpWebRequest的 post问题

问题描述 HttpWebRequesthttpWebRequest;httpWebRequest=(HttpWebRequest)HttpWebRequest.Create(url);httpWebRequest.CookieContainer=cc;httpWebRequest.ContentType=contentType;httpWebRequest.Referer=url;httpWebRequest.Accept=accept;httpWebRequest.UserAgent=user

实现php上传图片到指定位置路径保存到数据库

 本文为大家介绍下php上传图片到指定位置路径保存到数据库的具体实现,感兴趣的朋友不要错过 1.conn.php  代码如下: <?  $host="localhost"; //数据库服务器名称  $user="root"; //用户名  $pwd="1721"; //密码  $conn=mysql_connect($host,$user,$pwd);  mysql_query("SET  character_set_connec

IE 上传图片不显示问题 在线等 谢谢

问题描述 IE 上传图片不显示问题 在线等 谢谢 function previewImage(file imgId centerId) { if (file.files && file.files[0]) { var img = document.getElementById(imgId); var centerImg = document.getElementById(centerId); var reader = new FileReader(); reader.onload = fu

新浪Flash下载器 [HttpWebRequest | 新浪视频]

前言      哈哈,好久不写小工具了,去年写的笨笨图片批量下载器 V0.3 beta平时还是帮了一些忙的,今天的小工具是 新浪Flash下载器 .可以直接下载swf结尾的文件,如果下载新浪视频文件,你需要右键源代码找到这个flash的伪链接,如http://music.sina.com.cn/yueku/flashPlayer.swf?vid=6851105,然后把这里连接复制到软件输入框点下载就可以了.   运行环境      1.     Microsoft .NET Framework