如何在.net中模拟post方式提交json数据

hurricanezhu0321 2014-06-25 05:04:38
最近看见bing的网页上有一个机器人可以根据回答猜人物
http://renlifang.msra.cn/Q20/index.aspx
我想通过代码模拟提交的方式去交互(纯属个人试着玩),我在JS端试了用$.post()的方式去提交数据是可以交互的(必需制定json类型,否则返回错误)。现在我想在.net后台模拟这个动作,不知道该怎么实现。
$.post(
"/Q20/Handlers/HandlerQ20.ashx",
{ uid: “507937844”, sid: ”809662793“, choice: "yes", a: "GenerateQuestionHandler", questfd: "0"},
function(data){ },
"json"
)


我自己了用System.Net.HttpWebRequest对象来模拟提交,结果什么也没返回,但是将 request.ContentType = "application/json;charset=UTF-8";改为request.ContentType = "application/x-www-form-urlencoded"可以接受到返回数据,返回的是出错提示。用WebClient我也试过,结果一样。请大神看看是什么问题。

string url = "http://renlifang.msra.cn/Q20/Handlers/HandlerQ20.ashx";
string param = "{\"uid\":\"246534824\",\"sid\":\"906508525\",\"choice\":\"yes\",\"a\":\"GenerateQuestionHandler\",\"questfd\":\"0\"}";
string callback = PostMoths(url,param);
public static string PostMoths(string url, string param)
{
string strURL = url;
System.Net.HttpWebRequest request;
request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);
request.Method = "POST";
request.ContentType = "application/json;charset=UTF-8";
string paraUrlCoded = param;
byte[] payload;
payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
request.ContentLength = payload.Length;
Stream writer = request.GetRequestStream();
writer.Write(payload, 0, payload.Length);
writer.Close();
System.Net.HttpWebResponse response;
response = (System.Net.HttpWebResponse)request.GetResponse();
System.IO.Stream s;
s = response.GetResponseStream();
string StrDate = "";
string strValue = "";
StreamReader Reader = new StreamReader(s, Encoding.UTF8);
while ((StrDate = Reader.ReadLine()) != null)
{
strValue += StrDate + "\r\n";
}
return strValue;
}


...全文
58306 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenaachen 2015-04-09
  • 打赏
  • 举报
回复
你的问题的原因是这样的,ASP.Net 2.0 增强了安全性,对一些有危害的http 头进行了判断,比如url中有空格的情况,以帮助网站提高网络攻击的防御能力。如果你的http头中有一些ASP.NET 认为是有危害的信息,则会返回这个错误。你访问百度没有问题,是因为百度根本就不是asp.net 做的。 这个问题的解决办法是在你的 web.config 中添加如下配置: <configuration> <system.net> <settings> <httpWebRequest useUnsafeHeaderParsing="true" /> </settings> </system.net> </configuration>
by_封爱 版主 2014-06-26
  • 打赏
  • 举报
回复
http://renlifang.msra.cn/Q20/Handlers/HandlerQ20.ashx?uid=707434712&sid=820636449&choice=unknow&a=GenerateQuestionHandler&questfd=0 他的ashx输出跟别的不一样..他是返回一个js来下载的..不是直接的write()
by_封爱 版主 2014-06-26
  • 打赏
  • 举报
回复

private string HttpPost(string Url, string postDataStr)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            request.ContentType = "application/json";
            request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);
            Stream myRequestStream = request.GetRequestStream();
            StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
            myStreamWriter.Write(postDataStr);
            myStreamWriter.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream myResponseStream = response.GetResponseStream();
            StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
            string retString = myStreamReader.ReadToEnd();
            myStreamReader.Close();
            myResponseStream.Close();
            return retString;
        }
sunny906 2014-06-26
  • 打赏
  • 举报
回复
问题解决了?
hurricanezhu0321 2014-06-26
  • 打赏
  • 举报
回复
另外问一下怎么给分? 还有引用特定的几楼怎么弄的,小弟没玩过论坛,不怎么会。。。
hurricanezhu0321 2014-06-26
  • 打赏
  • 举报
回复
[quote] 请问出错提示具体是什么提示? 用Chrome或火狐可以看到jquery发送的数据的原始信息。 [quote] 没有出错,服务器什么都没返回而已。
hurricanezhu0321 2014-06-26
  • 打赏
  • 举报
回复
引用
一楼 “我一般都用WebClient 。。你可以试试”
webclient的方式我试过,结果一样
gqqnb 2014-06-26
  • 打赏
  • 举报
回复
请问出错提示具体是什么提示? 用Chrome或火狐可以看到jquery发送的数据的原始信息。
Remote Address:219.142.53.99:80
Request URL:http://renlifang.msra.cn/Q20/Handlers/HandlerQ20.ashx
Request Method:POST
Status Code:200 OK
Request Headersview source
Accept:application/json, text/javascript, */*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:74
你试试用C#把每个头字段设置得和jquery一样。
hurricanezhu0321 2014-06-26
  • 打赏
  • 举报
回复
不好意思各位,我发现不是这个问题,而是我忘记吧Cookie传过去了,大意了我以为这个公众应用不会验证Cookie的。。。结贴了
游离失所 2014-06-25
  • 打赏
  • 举报
回复

 WebClient client = new WebClient();
        NameValueCollection list = new NameValueCollection();
        list.Add("id", "11111");
        list.Add("name", "lee");
        client.UploadValues("目标URL", list);

        //目标页面获取值   request.form["id"]

我一般都用WebClient 。。你可以试试

110,534

社区成员

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

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

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