POST提交数据,一直返回【远程服务器返回错误: (403) 已禁止。】

wdcaaa 2011-10-31 10:43:59
需要POST一个XML,对方接到请求返回一个数据给我。这个POST的地址IE不能访问,但是是存在的。

代码如下:


private string PostXml(string url, string strPost)
{
string result = "";

StreamWriter myWriter = null;

HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url);
objRequest.Method = "POST";
objRequest.ContentLength = strPost.Length;
objRequest.ContentType = "text/xml";
objRequest.Accept = "*/*";
objRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";
objRequest.ServicePoint.Expect100Continue = true;
objRequest.KeepAlive = true;
try
{
myWriter = new StreamWriter(objRequest.GetRequestStream());
myWriter.Write(strPost);
}
catch (Exception e)
{
return e.Message;
}
finally
{
myWriter.Close();
}

HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();//此处异常
using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
{
result = sr.ReadToEnd();
sr.Close();
}
return result;
}
...全文
1809 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
Flashcom 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 wdcaaa 的回复:]

引用 19 楼 flashcom 的回复:
或者你把这个地址和XML的格式贴出来,我帮你测试一下


到你空间留言了,请帮忙测试一下。谢谢。
[/Quote]

给你回复留言了!
孟子E章 2011-11-01
  • 打赏
  • 举报
回复
这种问题你应该问清楚对方接受的要求是什么,
准确的提交url,正确的数据格式,是否允许匿名提交
等需要了解清楚,别人对这个url也是无法了解的。

403不是网络错误,连接是没问题的。
wdcaaa 2011-11-01
  • 打赏
  • 举报
回复
自顶两下
wdcaaa 2011-11-01
  • 打赏
  • 举报
回复
自顶一下
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wdcaaa 的回复:]
移动...我恨你...

照理来说,我不管这个XML的格式对不对,过去应该都是有个返回值吧?现在的情况貌似是连接不上啊。

你能发个你传输XML包的例子看看么?[/Quote]

对于http协议来说,返回403错误这就是返回值。它没有什么规范的“异常堆栈信息”这种数据返回。
wdcaaa 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 flashcom 的回复:]
或者你把这个地址和XML的格式贴出来,我帮你测试一下
[/Quote]

到你空间留言了,请帮忙测试一下。谢谢。
Flashcom 2011-10-31
  • 打赏
  • 举报
回复
或者你把这个地址和XML的格式贴出来,我帮你测试一下
Flashcom 2011-10-31
  • 打赏
  • 举报
回复
都差不多的,只是POST的包我是先打包到byte[]再发送的,
微软很变态的,就算你设置了
objRequest.ServicePoint.Expect100Continue = false;
有时还是发送100-continue;
过去的
服务器判断你是否有权限访问这个资源,有几个常用的判断
判断UserAgent,不同的UserAgent作不同返回值
判断Referer,很多时候都判断这个,这个不正确,就返回错误
wdcaaa 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 flashcom 的回复:]
还有一个可能是你POST的XML包中可能含有空行等空字符,服务器没有设置到过滤这些空字符
我几年前做SP时,那时移动刚上MISC,业务的定购和取消都要通过XML包都传输,那时就是因为这些空字符把很多大企业的技术搞死
[/Quote]


移动...我恨你...

照理来说,我不管这个XML的格式对不对,过去应该都是有个返回值吧?现在的情况貌似是连接不上啊。

你能发个你传输XML包的例子看看么?
Flashcom 2011-10-31
  • 打赏
  • 举报
回复
还有一个可能是你POST的XML包中可能含有空行等空字符,服务器没有设置到过滤这些空字符
我几年前做SP时,那时移动刚上MISC,业务的定购和取消都要通过XML包都传输,那时就是因为这些空字符把很多大企业的技术搞死
wdcaaa 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 net_lover 的回复:]
默认页可能不是Default.aspx

403错误是拒绝访问。
可能数据格式、提交的参数可能不符合接收端的要求
[/Quote]



我也在想这个问题,估计是我的数据格式有问题,或者是头部门有东西没有涉及到?

但是对方告诉我,只要POST了数据过去,就不会出现这种情况,可能是我网络或者别的什么情况,一般都会返回一个正确或者错误的代码回来。


另:按照@Flashcom的说法改了,依然403
Flashcom 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yxw545061402 的回复:]

哎,这个只有你慢慢的尝试了,暂时找不出什么问题了,至于斑竹说的aspx这个要求,好像也不存在吧,自己感觉,post数据,肯定得有xxx=some,才对啊
[/Quote]
并不一定的,一般的网页提交就是这个,ContentType的值为application/x-www-form-urlencoded时,数据格式就是xx=xx&aa=bb这样的
晏子 2011-10-31
  • 打赏
  • 举报
回复
哎,这个只有你慢慢的尝试了,暂时找不出什么问题了,至于斑竹说的aspx这个要求,好像也不存在吧,自己感觉,post数据,肯定得有xxx=some,才对啊
Flashcom 2011-10-31
  • 打赏
  • 举报
回复
objRequest.ServicePoint.Expect100Continue = true;
这个也是一个问题,不是所有的Web服务器都支持100-Continue的
孟子E章 2011-10-31
  • 打赏
  • 举报
回复
默认页可能不是Default.aspx

403错误是拒绝访问。
可能数据格式、提交的参数可能不符合接收端的要求


Flashcom 2011-10-31
  • 打赏
  • 举报
回复
objRequest.ContentLength = strPost.Length;
这个好有问题啊,这个数据包长度应该封包的长度,如果你的XML中含有中文就会不正确
XML的编码应该是UTF-8
objRequest.ContentLength = Encoding.UTF8.GetBytes().Length;
wdcaaa 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yxw545061402 的回复:]
strPost 你的xml是字符串类型吧,那你构造的时候用没有用url?xxx=strPost,也就是说,url格式是这样的,但是post传的值也是这样的哦xxx=strpost,xml字符串中还包含特殊字符,那你要进行转义什么的(用那个html什么编码哦)
[/Quote]

对,xml是字符串类型,没有参数xxx。直接POST过去。
转义什么的,不存在问题。正常情况下,我POST一个错误的过去,他会返回一个错误码回来。

现在只怕是我还没有连接上他。
wdcaaa 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 net_lover 的回复:]
你试试
post到
http://202.101.58.69:80/Default.aspx
[/Quote]

显然:远程服务器返回错误: (404) 未找到。

晏子 2011-10-31
  • 打赏
  • 举报
回复
strPost 你的xml是字符串类型吧,那你构造的时候用没有用url?xxx=strPost,也就是说,url格式是这样的,但是post传的值也是这样的哦xxx=strpost,xml字符串中还包含特殊字符,那你要进行转义什么的(用那个html什么编码哦)
孟子E章 2011-10-31
  • 打赏
  • 举报
回复
你试试
post到

http://202.101.58.69:80/Default.aspx
加载更多回复(5)

110,545

社区成员

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

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

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