httpwebrequest模拟请求奇怪错误

问题描述

httpwebrequest模拟请求模拟请求表单的post请求表单时multipart/form-data模式的模拟请求出错错误信息如下SpecifiedvaluehasinvalidControlcharacters.Parametername:valueatSystem.Net.WebHeaderCollection.CheckBadChars(Stringname,BooleanisHeaderValue)atSystem.Net.HttpWebRequest.SetSpecialHeaders(StringHeaderName,Stringvalue)atSystem.Net.HttpWebRequest.set_Referer(Stringvalue)atSdStateGridAcquirer.HTMLHelper.HttpPostS(Stringurl,Stringpostdata,Stringreferer,Stringboundary)

解决方案

解决方案二:
你要了解RFC2188协议以及后续的扩展协议,你提交的body数据格式要符合人家的规范。
解决方案三:
引用1楼sp1234的回复:

你要了解RFC2188协议以及后续的扩展协议,你提交的body数据格式要符合人家的规范。

这是我httpwatch抓到的东西POST/web/scc/sflow/distributetask/distributeTask.do?action=saveAndSendHTTP/1.1Accept:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/x-shockwave-flash,application/msword,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/xaml+xml,application/x-ms-xbap,application/x-ms-application,*/*Referer:http://10.158.249.36/web/scc/sflow/distributetask/distributeTask.do?action=init&activity=sgcsc002&processType=109&processNo=10903&appNo=141127765087&taskID=315649188&orgNo=3740403&actName=%E5%9C%B0%E5%B8%82%E6%8E%A5%E5%8D%95%E6%B4%BE%E5%B7%A5Accept-Language:zh-cnContent-Type:multipart/form-data;boundary=---------------------------7de1863814700f2UA-CPU:x86Accept-Encoding:gzip,deflateUser-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;.NETCLR2.0.50727;.NET4.0C;.NET4.0E)Host:10.158.249.36Content-Length:2383Connection:Keep-AliveCache-Control:no-cacheCookie:logonUsername=88882;ZP_CAL=%27fdow%27%3Anull%2C%27history%27%3A%222014/11/26/23/59%2C2014/11/26/23/59%2C2014/12/26/23/59%2C2014/12/27/23/59%2C2014/11/26/00/00%2C2014/11/27/00/00%2C2014/11/27/00/00%2C2014/11/26/00/00%2C2014/11/26/00/00%22%2C%27sortOrder%27%3A%22asc%22%2C%27hsize%27%3A9;JSESSIONID=vyvLJ2yL3nTvpGsXY10n7rXnbq6TFvwGsNMrfQkvX9bTJFhL7DZw!2142538846-----------------------------7de1863814700f2Content-Disposition:form-data;name="siteTypeCode"02-----------------------------7de1863814700f2Content-Disposition:form-data;name="appointReason"-----------------------------7de1863814700f2Content-Disposition:form-data;name="bookingTime"-----------------------------7de1863814700f2Content-Disposition:form-data;name="acceptTime"2014-11-2709:17-----------------------------7de1863814700f2Content-Disposition:form-data;name="appNo"141127765087-----------------------------7de1863814700f2Content-Disposition:form-data;name="taskId"315649188-----------------------------7de1863814700f2Content-Disposition:form-data;name="vheicleId"-----------------------------7de1863814700f2Content-Disposition:form-data;name="reapairEmpNoName"瀛熷簞鎶慨缁?-----------------------------7de1863814700f2Content-Disposition:form-data;name="reapairEmpNo"瀛熷簞鎶慨缁?-----------------------------7de1863814700f2Content-Disposition:form-data;name="repairOrg"374040304-----------------------------7de1863814700f2Content-Disposition:form-data;name="repairDeptNo"0001488348-----------------------------7de1863814700f2Content-Disposition:form-data;name="dispachTime"2014-11-2709:17:47-----------------------------7de1863814700f2Content-Disposition:form-data;name="normalOpinion"5050074696-----------------------------7de1863814700f2Content-Disposition:form-data;name="handleOpinion"璇峰鐞嗭紝骞舵寜銆婃灒搴勫叕鍙?5598涓氬姟宸ュ崟濉啓鎵嬪唽銆嬭繘琛屽弽棣堣澶勭悊-----------------------------7de1863814700f2Content-Disposition:form-data;name="wkstAttach.contentFile";filename=""Content-Type:application/octet-stream-----------------------------7de1863814700f2Content-Disposition:form-data;name="forkValue"鏁呴殰澶勭悊-----------------------------7de1863814700f2Content-Disposition:form-data;name="flowHandleDept"0010924641-----------------------------7de1863814700f2Content-Disposition:form-data;name="isSmsNotice"1-----------------------------7de1863814700f2Content-Disposition:form-data;name="orgNo"3740403-----------------------------7de1863814700f2Content-Disposition:form-data;name="countyCode"370402-----------------------------7de1863814700f2--
解决方案四:
cookiepostdata数据都拿到了就是不知道提交数据编码
解决方案五:
一般用UTF-8就行了。
解决方案六:
应该是你生成的数据有问题了,可以参考一下这个链接http://blog.csdn.net/flymorn/article/details/6769722
解决方案七:
http://www.telerik.com/fiddler/add-ons有fiddler抓,然后在这里下个配套的代码生成器,直接把请求拖到code页就帮你生成代码了
解决方案八:
光有错误信息,看不出多少门道啊,不如贴上部分代码
解决方案九:
是不是多了两个--,之前我也弄这个东西,估计是那个-号的问题。多一个少一个都不行,你捉个标准的对比一下吧
解决方案十:
boundary=---------------------------7de1863814700f2这个是动态的,请求了几次这个值都不一样
解决方案十一:
publicstaticboolHttpPostS(stringurl,stringpostdata,stringreferer,stringboundary){boolst=true;try{stringresult="";CookieContainercCurrent=newCookieContainer();Uriu=newUri(url);cCurrent.Add(u,newCookie("JSESSIONID",jsessionId));cCurrent.Add(u,newCookie("logonUsername",XF_Main.UserName));//if(P3p!=null)//{//cCurrent.Add(u,newCookie("P3P",P3p));//}HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create(url);varmemStream=newMemoryStream();//边界符varbeginBoundary=Encoding.ASCII.GetBytes("--"+"---------------------------"+boundary+"rn");varfileStream=newFileStream(Application.StartupPath+@"file.dat",FileMode.Open,FileAccess.Read);//最后的结束符varendBoundary=Encoding.ASCII.GetBytes("--"+"---------------------------"+boundary+"--rn");//设置属性request.Headers.Clear();request.Method="POST";//必须为大写,不然会出错//request.Headers.Add("headName",HttpUtility.UrlEncode("value"));request.ContentType="multipart/form-data;boundary=---------------------------"+boundary;//request.Accept="image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/x-shockwave-flash,application/msword,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/xaml+xml,application/x-ms-xbap,application/x-ms-application,*/*";request.UserAgent="Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;.NETCLR2.0.50727;.NET4.0C;.NET4.0E)";XF_Main.WriteErrorLog(referer);//newNameValueCollection()//request.ContentLength=data.Length;request.Referer=referer;request.AllowAutoRedirect=true;request.KeepAlive=true;request.CookieContainer=cCurrent;request.Timeout=6000;//超时时间XF_Main.WriteErrorLog("3");//写入上传文件stringfilePartHeader="Content-Disposition:form-data;name="{0}";filename="{1}"rn"+"Content-Type:text/plainrnrn";varheader=string.Format(filePartHeader,"wkstAttach.contentFile",Application.StartupPath+@"file.dat");varheaderbytes=Encoding.UTF8.GetBytes(header);memStream.Write(beginBoundary,0,beginBoundary.Length);memStream.Write(headerbytes,0,headerbytes.Length);varbuffer=newbyte[1024];intbytesRead;//=0XF_Main.WriteErrorLog("4");while((bytesRead=fileStream.Read(buffer,0,buffer.Length))!=0){memStream.Write(buffer,0,bytesRead);}memStream.Write(Encoding.UTF8.GetBytes(postdata),0,Encoding.UTF8.GetBytes(postdata).Length);//写入最后的结束边界符memStream.Write(endBoundary,0,endBoundary.Length);request.ContentLength=memStream.Length;XF_Main.WriteErrorLog("5");//UTF8Encodingencoding=newUTF8Encoding();//ASCIIEncodingencoding=newASCIIEncoding();//byte[]data=encoding.GetBytes(postdata);//post方式的编码//byte[]data=Encoding.UTF8.GetBytes(postdata);//post方式的编码//XF_Main.WriteErrorLog("21");//request.Headers.Clear();//request.ServicePoint.ConnectionLimit//request.UserAgent="Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Trident/4.0;.NETCLR2.0.50727;.NET4.0C;.NET4.0E)";//request.Headers.Add("Accept-Language","zh-cn");//request.Headers.Add("Accept-Encoding","gzip,deflate");//request.Accept="application/x-shockwave-flash,image/gif,image/jpeg,image/pjpeg,image/pjpeg,application/xaml+xml,application/vnd.ms-xpsdocument,application/x-ms-xbap,application/x-ms-application,application/msword,application/vnd.ms-excel,application/vnd.ms-powerpoint,*/*";//request.Host="10.158.249.36";//request.PreAuthenticate=true;//request.Credentials=CredentialCache.DefaultCredentials;//XF_Main.WriteErrorLog("3");//提交请求stream=request.GetRequestStream();memStream.Position=0;vartempBuffer=newbyte[memStream.Length];memStream.Read(tempBuffer,0,tempBuffer.Length);memStream.Close();stream.Write(tempBuffer,0,tempBuffer.Length);stream.Close();//接收HttpWebResponseresponse=(HttpWebResponse)request.GetResponse();//XF_Main.WriteErrorLog("4");if(response.StatusCode!=HttpStatusCode.OK)returnfalse;//StreamReaderstreamReader=newStreamReader(response.GetResponseStream(),Encoding.GetEncoding("utf-8"));//StreamReaderstreamReader=newStreamReader(response.GetResponseStream(),Encoding.UTF8);StreamReaderstreamReader=newStreamReader(response.GetResponseStream(),Encoding.UTF8);result=streamReader.ReadToEnd();request.Abort();response.Close();streamReader.Close();cCurrent=null;returnst;}catch(Exceptionex){XF_Main.WriteErrorLog(ex.Message+"rn"+ex.StackTrace);st=false;returnfalse;}returnst;}publicstaticstringGetMultipartData(stringpostdata,stringboundary){array=postdata.Split('&');datas=newStringBuilder();foreach(stringstrinarray){string[]arr=str.Split('=');//if(str.Contains("wkstAttach"))//datas.AppendFormat("-----------------------------{0}rnContent-Disposition:form-data;name="{1}";filename=""rnContent-Type:application/octet-streamrnrn{2}rn",boundary,arr[0],arr[1]);//elsedatas.AppendFormat("-----------------------------{0}rnContent-Disposition:form-data;name="{1}"rnrn{2}rn",boundary,arr[0],arr[1]);}datas.AppendFormat("-----------------------------{0}--rn",boundary);returndatas.ToString();}

解决方案十二:
这是部分代码stringboundary=DateTime.Now.Ticks.ToString("x");

这是我生成的boundary是不是跟网站上的不一样导致的

时间: 2024-09-08 10:56:58

httpwebrequest模拟请求奇怪错误的相关文章

服务器-一次HttpWebRequest模拟请求,触发BeginRequest事件两次

问题描述 一次HttpWebRequest模拟请求,触发BeginRequest事件两次 服务器:Server 2008 , IIS 7.5, 请求的一般处理程序 一次HttpWebRequest模拟请求,触发HttpModule的context_BeginRequest事件两次,第一次带参数,第二次没有参数 这样操作是为了过滤一些非法请求占用IIS并发, 例如请求不存在的页面或图片,请求不带参数等情况. 被这个问题折磨两天了,希望有大神指点!!!先跪了

C#HttpWebRequest 模拟请求一个URL和在网站上直接输入这个URL返回的页面不一样

问题描述 C#HttpWebRequest 模拟请求一个URL和在网站上直接输入这个URL返回的页面不一样 以上都是同一个URL请求返回的页面.为什么会出现这种情况,实在没有C币了求好心人帮助. myRequest = (HttpWebRequest)WebRequest.Create(requestUrlString); myRequest.Method = ""GET""; myRequest.UserAgent = ""Mozilla/5.

HttpWebRequest 模拟请求,怎么传递当前用户信息?

问题描述 我有2个站点.A站点用户登录,提交数据给B站点,B站点需要或去当前用户.this.User.Identity.GetUserId()在B站点始终为null,A站点能或去到值.请问怎么解决? 解决方案 解决方案二:可以考虑cookie或者session共享,或者B站做接口,将登录信息提交给B站,B站重新获取和登录解决方案三:你要的是SSO解决方案四:B站点做接口,由A站点调用传进去解决方案五:用接口传过去就行了吧解决方案六:引用3楼FoxDave的回复: B站点做接口,由A站点调用传进去

httpwebrequest-HttpWebRequet模拟请求与浏览器一样,为什么Respnse回来的结果不一样?

问题描述 HttpWebRequet模拟请求与浏览器一样,为什么Respnse回来的结果不一样? 各位大牛, 小弟业余爱好者.我用HttpWebRequest模拟请求网站,我通过,Fiddler查看 我与浏览器的请求头Header,内容一样,但返回的结果不一样,我的程序得到的 是空白内容,而浏览器返回的是真正的内容.我研究,并提取了cookie,重新加 入请求头再次请求,结果还是空,到底是什么原因啊.请求各位高人,指点迷津. 解决方案 换个网站试试呢,所有网站都一样吗? 解决方案二: 除了coo

从session实现机制分析模拟请求验证码的可行性(转)

悲剧了,发现写完这篇blog没有配上这个格调超高的标题.   1.0问题背景 现在要实现一个带验证码网站的的自动登陆功能.验证码识别过程不再这篇文章的讨论之中.(之后有篇文章我会详细的总结验证码的识别过程).现在问题来了,怎么拿到你本次请求登陆页面的验证码图片? 2.0方案分析 现在有几种思路: (1)请求登陆页面,截取验证码图片,类似截屏,seleinum,webbrower的DrawToBitmap()等. (2)还是webbrower,将图片复制到剪切板在从剪切板中搞出来 HTMLCont

htmlunit 登录问题-htmlunit模拟登录 验证码错误

问题描述 htmlunit模拟登录 验证码错误 使用htmlunit模拟登录的时候 ,首先穿创建了一个webclient 用webclient请求登录页面,同事请求解析验证码,验证码解析正确,然后开始登录系统,一直提示验证码错误. WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_11); webClient.getOptions().setJavaScriptEnabled(true); webClient

使用C#的HttpWebRequest模拟登陆网站

原文:使用C#的HttpWebRequest模拟登陆网站 这篇文章是有关模拟登录网站方面的. 实现步骤: 启用一个web会话 发送模拟数据请求(POST或者GET) 获取会话的CooKie 并根据该CooKie继续访问登录后的页面,获取后续访问的页面数据. 我们以登录人人网为例,首先需要分析人人网登录时POST的数据格式,这个可以通过IE9中只带的F12快捷键,调出开发人员工具.如下图:   通过开始捕获得到POST的地址和POST的数据 POST数据: email=aaa@163.com&pa

模拟请求webservice并获取返回报文

     有时需要模拟请求webservice服务,并处理返回的报文,根据报文的信息进行业务处理.      样例代码如下:  import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import

android银联支付,请求报文错误[8100008]

问题描述 android银联支付,请求报文错误[8100008] 之前搞得银联支付,并且试用了没有问题. 但今天再用就在跳转时弹出对话框,显示: 请求报文错误[8100008] 我没有动过这一块的代码. 请大神指导 解决方案 Android-银联支付android银联支付android银联支付 解决方案二: 问下银联是不是改什么东西了?或者确认一下这个代码的意思 解决方案三: iOS同样遇到这个问题,楼主解决了吗 解决方案四: 是你们服务端改东西了吧 流程图说明: (1)用户在客户端中点击购买商