c#http post请求出错

qq_30416815 2016-01-12 10:20:29
代码中post的数据主体换成错的返回响应response.Status还是ok,是不是URL什么错误了
...全文
439 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
西霸阿超 2016-01-12
  • 打赏
  • 举报
回复
你提交后,判断返回的东西不就可以了吗。
qq_30416815 2016-01-12
  • 打赏
  • 举报
回复
引用 2 楼 save4me 的回复:
response.Status为OK只是说服务器正常返回了值,并不表示你提交的数据是正确的。比如说你提交了数据,服务器返回一个消息说你的数据错误,这时候,response.status也是OK。 另外服务器可以设置不同错误的response.status。有时候为了避免暴露,服务器可以隐藏一些错误。
那怎么样才能知道提交的数据是否成功
save4me 2016-01-12
  • 打赏
  • 举报
回复
response.Status为OK只是说服务器正常返回了值,并不表示你提交的数据是正确的。比如说你提交了数据,服务器返回一个消息说你的数据错误,这时候,response.status也是OK。 另外服务器可以设置不同错误的response.status。有时候为了避免暴露,服务器可以隐藏一些错误。
qq_30416815 2016-01-12
  • 打赏
  • 举报
回复
string url = "http://115.236.32.180/csxt/index.php/vote-vote?id=30"; string postData = null; System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); req.Method = "POST"; req.Accept = "application/json, text/javascript, */*"; req.Referer = "http://115.236.32.180/csxt/index.php/vote-vote?id=30"; req.Headers["Accept-Language"] = "zh-CN"; req.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; Tridene/7.0; rv:11.0) like Gecko"; req.ContentType = "application/x-www-form-urlencoded"; req.Headers["Accept-Encoding"] = "gzip, deflate"; req.Host = "115.236.32.180"; req.KeepAlive = true; postData = "phone=13016437824&id=30"; byte[] bytes = System.Text.Encoding.UTF8.GetBytes(postData); System.IO.Stream newStream = req.GetRequestStream(); newStream.Write(bytes, 0, bytes.Length); newStream.Close(); System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)req.GetResponse(); zhuangtai = " ss" + response.StatusDescription; return zhuangtai;
LoserOrLeader 2016-01-12
  • 打赏
  • 举报
回复
没代码谁,你让我猜?
save4me 2016-01-12
  • 打赏
  • 举报
回复
我刚才试着提交了,如果成功的话,页面会返回正文里面包含"投票成功"文字,并且响应头包含Set-Cookie,失败的话,这两项都没有。
引用 11 楼 qq_30416815 的回复:
[quote=引用 6 楼 save4me 的回复:] 这个需要根据具体的情况,一般网站如果提交成功,都会返回内容,比如成功提交的消息,或者成功的页面,而且往往成功和失败返回的内容是有区别的。你可以根据成功返回的内容,提取关键字来判断,比如包括OK或成功的,就判断问成功。就像判断登录页面,如果返回的页面里包含欢迎XXX,可能就是成功的标志,如果是请重新登录,那就是失败的标志。类似的。
我用抓包工具试了一下正确输入和错误输入,正确的时候响应报文的line-base test data是有内容的,但是错误的时候显示no_vote_option_selected,但是我的代码里还有显示内容和正确的时候显示的内容一样,我不知道问题在哪[/quote]
qq_30416815 2016-01-12
  • 打赏
  • 举报
回复
引用 6 楼 save4me 的回复:
这个需要根据具体的情况,一般网站如果提交成功,都会返回内容,比如成功提交的消息,或者成功的页面,而且往往成功和失败返回的内容是有区别的。你可以根据成功返回的内容,提取关键字来判断,比如包括OK或成功的,就判断问成功。就像判断登录页面,如果返回的页面里包含欢迎XXX,可能就是成功的标志,如果是请重新登录,那就是失败的标志。类似的。
我用抓包工具试了一下正确输入和错误输入,正确的时候响应报文的line-base test data是有内容的,但是错误的时候显示no_vote_option_selected,但是我的代码里还有显示内容和正确的时候显示的内容一样,我不知道问题在哪
  • 打赏
  • 举报
回复
尽管你还没有在服务器端正确抛出异常状态的知识,我还是给你说一下客户端如何处理“post请求出错”吧。 在客户端,如果必须要在底层去处理,写
catch (WebException ex)
{
    .....
}
例如你的客户端是 Http协议,就可以写
catch (WebException ex)
{
     var status = ((HttpWebResponse)ex.Response).StatusCode;
}
假设通常是在表现层才去统一捕获异常,则可能是写
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    var webError = e.ExceptionObject as WebException;
    if (webError != null)
    {
        var response = webError.Response;
        ......
    }
}
这类处理。 总之,不是直接读取 Response.StatusCode,而是要到你不惑异常的模块去中读取。 另外,根据协议不同,有些人可能习惯于用 200 OK 状态、但是返回特定的字符串来“表示”业务处理出错。这就是要根据业务协议来看了,这种设计没有遵循 .net 框架。但是也不少见。
  • 打赏
  • 举报
回复
引用 4 楼 qq_30416815 的回复:
[quote=引用 2 楼 save4me 的回复:] response.Status为OK只是说服务器正常返回了值,并不表示你提交的数据是正确的。比如说你提交了数据,服务器返回一个消息说你的数据错误,这时候,response.status也是OK。 另外服务器可以设置不同错误的response.status。有时候为了避免暴露,服务器可以隐藏一些错误。
那怎么样才能知道提交的数据是否成功[/quote] 你可以在代码中写
throw new MyException("出错啦。", innerException);
这类语句。你可以自己看看客户端会得到什么结果。 整个系统都会有一个异常处理的框架,客户端也是如此。当客户端得到的返回状态不是 200 OK,你的客户端代码应该走异常处理流程。你不可能去通过什么 response.Code 或者 Status 去得到,你应该到 catch 语句块或者 UnhandledException 事件处理等等与你的客户端系统相适应的“异常处理模块”中去查看 Exception 对象的具体类型(子类型),这些 Exception 对象会返回 http 返回码。
xuzuning 2016-01-12
  • 打赏
  • 举报
回复
http://115.236.32.180/csxt/index.php/vote-vote?id=30 中有表单(节选) <form method="post" onsubmit="return validate();" action="http://115.236.32.180/csxt/index.php/vote-vote" id="p8_vote_30"> <input type="hidden" name="vid" id="vid" value="30"> <input type="hidden" name="multi" id="multi" value="10"> <input type="hidden" name="min" id="min" value="10"> <input type="text" name="username" id="username" style="padding:5px 10px;"> <input type="text" name="phone" id="phone" style="padding:5px 10px;"> <input type="submit" class="pxbtn" value="提 交" /> <input type="hidden" name="id" value="30" /> </form> 共 6 项,你只提交了 2 项 postData = "phone=13016437824&id=30"; 应该是不会通过对方的表单验证的。取不到数据可能才会出错
  • 打赏
  • 举报
回复
引用 楼主 qq_30416815 的回复:
代码中post的数据主体换成错的返回响应response.Status还是ok,是不是URL什么错误了
你自己编写的代码去接受的数据主体。 难道说你不想修改自己的代码的bug,只想纠结为什么程序还能有返回?那么你直接把接收post数据的目标页面删除掉就可以了。
save4me 2016-01-12
  • 打赏
  • 举报
回复
这个需要根据具体的情况,一般网站如果提交成功,都会返回内容,比如成功提交的消息,或者成功的页面,而且往往成功和失败返回的内容是有区别的。你可以根据成功返回的内容,提取关键字来判断,比如包括OK或成功的,就判断问成功。就像判断登录页面,如果返回的页面里包含欢迎XXX,可能就是成功的标志,如果是请重新登录,那就是失败的标志。类似的。
引用 4 楼 qq_30416815 的回复:
[quote=引用 2 楼 save4me 的回复:] response.Status为OK只是说服务器正常返回了值,并不表示你提交的数据是正确的。比如说你提交了数据,服务器返回一个消息说你的数据错误,这时候,response.status也是OK。 另外服务器可以设置不同错误的response.status。有时候为了避免暴露,服务器可以隐藏一些错误。
那怎么样才能知道提交的数据是否成功[/quote]

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧