问下各位,我 c#调用httppost调用webapi,也用postman做了测试是可以的,也写了代码了,为何我程序端运行,还是出错?

ruan1978 2018-10-16 03:42:03
我在c# winform程序里调用第三方提供的api,也通过postman测试是正常的,现在通过c#写了一段函数,访问,一直有问题。
1.postman的测试ui header部分

2.postman的测试ui body部分


3.我的访问的函数代码如下:
public static string PostFunc(string apiUrl, string token, string param)
{
string strJson = string.Empty;
HttpWebRequest request = null;
HttpWebResponse response = null;
try
{
ASCIIEncoding encoding = new ASCIIEncoding();
request = WebRequest.Create(apiUrl) as HttpWebRequest;
request.AllowWriteStreamBuffering = true;//
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";

byte[] b = Encoding.UTF8.GetBytes(param);
//Header中添加token验证(服务器要求)
request.Headers.Add("eg-token", token);//添加token到header
request.Headers.Add("Content-Type", "application/json");
//request.ContentType = "application/json";//已有token使用json类型
request.ContentLength = b.Length;
request.Method = "POST";
if (b.Length > 0)
{
using (Stream stream = request.GetRequestStream())
{
stream.Write(b, 0, b.Length);
stream.Close();
}
}
//获取服务器返回
using (response = request.GetResponse() as HttpWebResponse)
{
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
strJson = reader.ReadToEnd();
reader.Close();
}
}
return strJson;
}
catch (Exception exception)
{
return exception.Message;
}
finally
{
if (response != null)
response.Close();
}
}
对照postman方式,请问如何怎么修改?我红色部分代码
...全文
1468 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
橙色阳光 2019-10-22
  • 打赏
  • 举报
回复
你POSTman 都成功了,那就POSTman生成代码去跑呗 https://blog.csdn.net/u013068377/article/details/78821343
正怒月神 2018-10-17
  • 打赏
  • 举报
回复
引用 3 楼 ruan1978 的回复:
[quote=引用 2 楼 hanjun0612 的回复:] request.ContentType = "application/json"; 为何注释掉?
不注释掉也是老样子[/quote] 那你试试看这个呢 https://www.cnblogs.com/MuNet/p/6732338.html
ruan1978 2018-10-17
  • 打赏
  • 举报
回复
引用 2 楼 hanjun0612 的回复:
request.ContentType = "application/json"; 为何注释掉?
不注释掉也是老样子
正怒月神 2018-10-17
  • 打赏
  • 举报
回复
request.ContentType = "application/json"; 为何注释掉?
ruan1978 2018-10-17
  • 打赏
  • 举报
回复
请路过的,帮我分析下原因?
ruan1978 2018-10-17
  • 打赏
  • 举报
回复
引用 9 楼 youbl 的回复:
scdown.qq.com
这个域名都不存在,你确认你写对了?

我先运行,fiddler,然后再运行postman,操作。
游北亮 2018-10-17
  • 打赏
  • 举报
回复
scdown.qq.com 这个域名都不存在,你确认你写对了?
ruan1978 2018-10-17
  • 打赏
  • 举报
回复
引用 5 楼 youbl 的回复:
你安装一个Fiddler,并开启代理,
然后代码上加 request.Proxy = new WebProxy("127.0.0.1", 8888);
就可以抓到你的程序发出的包了,
对比一下程序发的包,跟postman发的包,header或body有什么差异,就知道问题所在了


我用fiddler抓取的数据包如图


正怒月神 2018-10-17
  • 打赏
  • 举报
回复
我意思是,你去换个代码跑跑人家的方法看看,如果人家可以,你在对比自己的代码,看看哪里出问题了
ruan1978 2018-10-17
  • 打赏
  • 举报
回复
引用 4 楼 hanjun0612 的回复:
[quote=引用 3 楼 ruan1978 的回复:] [quote=引用 2 楼 hanjun0612 的回复:] request.ContentType = "application/json"; 为何注释掉?
不注释掉也是老样子[/quote] 那你试试看这个呢 https://www.cnblogs.com/MuNet/p/6732338.html[/quote] 这个貌似帮助不大。
游北亮 2018-10-17
  • 打赏
  • 举报
回复
你安装一个Fiddler,并开启代理, 然后代码上加 request.Proxy = new WebProxy("127.0.0.1", 8888); 就可以抓到你的程序发出的包了, 对比一下程序发的包,跟postman发的包,header或body有什么差异,就知道问题所在了

12,162

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 Web Services
社区管理员
  • Web Services社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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