httppost问题

szjarvis 2016-02-22 03:04:28
在网上找了段代码,有个问题想问问,以前没做过这东西,先看代码:

private readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true; //总是接受
}
public HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, Encoding charset)
{
HttpWebRequest request = null;
//HTTPSQ请求
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = DefaultUserAgent;
//如果需要POST数据
if (!(parameters == null || parameters.Count == 0))
{
StringBuilder buffer = new StringBuilder();
int i = 0;
foreach (string key in parameters.Keys)
{
if (i > 0)
{
buffer.AppendFormat("&{0}={1}", key, parameters[key]);
}
else
{
buffer.AppendFormat("{0}={1}", key, parameters[key]);
}
i++;
}
byte[] data = charset.GetBytes(buffer.ToString());
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
return request.GetResponse() as HttpWebResponse;
}

以下是调用代码:

string sUrl = "https://wwwX.mabcd.com/zmsss3/domaindata/ordercontract/"; //为保密,此url为虚构
string sContent = "<OrderRequest xmlns=\"http://schemas.ms.it.oem/digitaldistribution/2010/10\"><UserRequestKey>FD111-95222-DA218-3EEEF-I06YC-lyESz</UserRequestKey><PONumber/><PODateFrom/><PODateTo/></OrderRequest>";

Encoding encoding = Encoding.GetEncoding("utf-8");
IDictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("authuser", "*****");
parameters.Add("authpass", "*****");
parameters.Add("orgkey", "*****");
parameters.Add("orgname", "*****");
HttpWebResponse response = CreatePostHttpResponse(sUrl, parameters, encoding);

//打印返回值
Stream stream = response.GetResponseStream(); //获取响应的字符串流
StreamReader sr = new StreamReader(stream); //创建一个stream读取流
string html = sr.ReadToEnd(); //从头读到尾,放到字符串html
//Console.WriteLine(html);
Response.Write(html);


问题如下:
调用时定义的sUrl和sContent内容是客户给的,还给了用户名和密码,sUrl知道在哪用,其它的在哪用?
是在:
IDictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("authuser", "*****");
parameters.Add("authpass", "*****");
parameters.Add("orgkey", "*****");
parameters.Add("orgname", "*****");
这里用吗?不过客户没有给参数名,我如何加到这?客户那边怎么对应我POST过去的各个值?


没分了只有30分全上了,大虾们帮帮忙。
...全文
311 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
nomasp 2016-02-29
  • 打赏
  • 举报
回复
我在手机上回的 代码就粗略看了一下 你说未经授权 那就要登陆咯 如果是web api的话 自带的没有login 你可以自己写一个 另外说的不能理解 你可以约到都使用json 然后讲需要传给服务器的数据整理好 到时候会根据post方法的参数的模型进行解析
szjarvis 2016-02-29
  • 打赏
  • 举报
回复
如何知道浏览器如何把这个验证框中的用户名和密码发送给对方,两个输入框的名称如何获得?
szjarvis 2016-02-29
  • 打赏
  • 举报
回复
顶上去。

客户告诉我们通过Firefox中的RESTClient可以测试,通过浏览器的信任用户可以测试成功,在浏览器上会弹出一个登陆框让输入用户名和密码:



只是我要如何通过C#去实现?
szjarvis 2016-02-22
  • 打赏
  • 举报
回复
我是不是应该找对方要,提交时各参数的名称,然后对应写在这里: IDictionary<string, string> parameters = new Dictionary<string, string>(); parameters.Add("authuser", "*****"); parameters.Add("authpass", "*****"); parameters.Add("orgkey", "*****"); parameters.Add("orgname", "*****"); 是这样吗?
xuzuning 2016-02-22
  • 打赏
  • 举报
回复
POST 所需数据的名称和格式是由接收方提供的(一般是通过表单) 你这是模拟提交,应先抓取对方的表单页进行解析 提交时还应携带可能存在的 cookie
szjarvis 2016-02-22
  • 打赏
  • 举报
回复
我这个程序调试时的错误就是401未经授权,我该怎么办?
szjarvis 2016-02-22
  • 打赏
  • 举报
回复
他们也没要求Dictionary排序,第一次弄这个,没经验,只要找人家现成的。
橘子皮... 2016-02-22
  • 打赏
  • 举报
回复
为什么就这么多人喜欢用哪个苏飞的模块呢,一点都不好用,我用就只用自己写的,别人写的复杂模块绝对不用,出了问题找死都找不到
江南小鱼 2016-02-22
  • 打赏
  • 举报
回复
post消息给对方,post什么玩意,这个是要和对方事先约定的,也就是说post过去的消息是双方认可的协议格式 这样的话,对方才能解析并识别你post过去的东东
正怒月神 2016-02-22
  • 打赏
  • 举报
回复
一般,他们会要求你的Dictionary排序一下,所以他们就知道顺序调用你传的参数了

110,571

社区成员

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

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

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