首页新闻找找看学习计划

Post请求中如何添加Token参数

0
悬赏园豆:20 [已解决问题] 解决于 2018-09-27 14:30

如图这样,Post请求中需要connectapitoken这个参数,
但是按我这样的做法返回的内容有误,问下这个参数如何正确添加到请求中?

jianming2032的主页 jianming2032 | 初学一级 | 园豆:104
提问于:2018-09-26 14:22
< >
分享
最佳答案
0

返回啥错误,http code是多少

收获园豆:8
MrNice | 老鸟四级 |园豆:3012 | 2018-09-26 15:49

http code?没有这个

总共是这些

jianming2032 | 园豆:104 (初学一级) | 2018-09-26 15:57

@jianming2032:你这是你的请求内容,我看看你的返回,response

MrNice | 园豆:3012 (老鸟四级) | 2018-09-26 16:15

@MrNice:

你好,response返回内容

jianming2032 | 园豆:104 (初学一级) | 2018-09-26 16:18

Headers = {Cache-Control: private
Content-Length: 275
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 26 Sep 2018 08:16:40 GMT

}

jianming2032 | 园豆:104 (初学一级) | 2018-09-26 16:24

@jianming2032: 他想看的是你调用接口,别人给你响应的是啥?你给出这没有用啊。

Jeffcky | 园豆:2563 (老鸟四级) | 2018-09-26 16:26

@Jeffcky:
{"ErrorDescription":null,"Result":1,"AreaSummaryData":"","AvailableSeats":-
1,"ExtendedResultCode":0,"MaxSeatsPerRow":0,"Order":null,"RedemptionsRemainingForVouchers":
[],"SeatData":"","SeatDataLength":0,"SeatLayoutData":null,"SeatsNotAllocated":false,"SessionStatuses":[null]}

这个?

jianming2032 | 园豆:104 (初学一级) | 2018-09-26 16:32

@jianming2032: 根据你给的内容,调用是成功的,你说的返回有误是指结果和你预想的不一样?还是指啥

MrNice | 园豆:3012 (老鸟四级) | 2018-09-26 20:56

@MrNice: 对,就是跟预想的不一样,Result=0才是正确的返回。

jianming2032 | 园豆:104 (初学一级) | 2018-09-27 09:25

@jianming2032: 这时候分成两种情况了,1.如果接口是你们自己开发的,那么建议联合调试一下;2.如果接口是别人提供的,你无法知晓接口代码,那么看看对方提供的接口说明,Result=1代表什么,是不是传送的参数有问题

MrNice | 园豆:3012 (老鸟四级) | 2018-09-27 09:34

@MrNice: 别人提供的,而且说明不详细

jianming2032 | 园豆:104 (初学一级) | 2018-09-27 09:41

@jianming2032: 这就很难受了,建议你联系接口开发商,文档写成这样也是没谁了

MrNice | 园豆:3012 (老鸟四级) | 2018-09-27 09:46

@MrNice: 只能这样了,谢了啊

jianming2032 | 园豆:104 (初学一级) | 2018-09-27 10:02
其他回答(4)
0

这么做有问题的话,是不是有可能和IdentityServer中使用beartoken一样,IdentityServer中是请求头的键是Authorization,值对应你这里的是那个connectapitoken DC5F8....。这个token和guid有空格。你可以试试。再有你也没明确说是返回的是token参数有误,不排除其他问题。

弱弱问一句怎么不用HttpClient呢。

收获园豆:4
Jeffcky | 园豆:2563 (老鸟四级) | 2018-09-26 14:49

谢谢回复,我试试看
用HttpWebRequest配置请求方便一点?

支持(0) 反对(0) jianming2032 | 园豆:104 (初学一级) | 2018-09-26 15:20

你说的是不是这样:
request.Headers.Add("Authorization", "connectapitoken:DC5F8105-7717-4EA1-A4BF-0ED4-E85C2D77");
还是返回错误

支持(0) 反对(0) jianming2032 | 园豆:104 (初学一级) | 2018-09-26 15:28

@jianming2032: 返回的结果是啥??

支持(0) 反对(0) Jeffcky | 园豆:2563 (老鸟四级) | 2018-09-26 16:24

@jianming2032: 不是那样的。后面没有冒号。将冒号换成空格。

支持(0) 反对(0) Jeffcky | 园豆:2563 (老鸟四级) | 2018-09-26 16:25
0

var buffer=Encoding.UTF8.GetBytes(param);

 request.GetRequestStream().Write(buffer, 0, buffer.Length);//这边写进request请求数据

收获园豆:8
华临天下 | 园豆:1359 (小虾三级) | 2018-09-26 17:29

加了
string paraUrlCoded = paras;
byte[] payload;
//将URL编码后的字符串转化为字节
payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);//Encoding.ASCII.GetBytes(paraUrlCoded); ;//
//设置请求的 ContentLength
request.ContentLength = payload.Length;

支持(0) 反对(0) jianming2032 | 园豆:104 (初学一级) | 2018-09-27 09:28

@jianming2032: 还是没有用的吗?

支持(0) 反对(0) 华临天下 | 园豆:1359 (小虾三级) | 2018-09-27 10:05

@华临天下: 嗯。

支持(0) 反对(0) jianming2032 | 园豆:104 (初学一级) | 2018-09-27 10:32

@jianming2032: 

   var buffer = Encoding.UTF8.GetBytes(param);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            request.Method = "Post";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = buffer.Length;
            request.Timeout = 60 * 1000;           

            Stream reqStream = request.GetRequestStream();
            reqStream.Write(buffer, 0, buffer.Length);
         

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader reader = new StreamReader(stream);
            var res = reader.ReadToEnd();

这个是我刚刚简写的一个请求,可以请求我本地的一个方法。你可以看看有没有对你帮助

支持(0) 反对(0) 华临天下 | 园豆:1359 (小虾三级) | 2018-09-27 10:36

@华临天下: 我对比了一下,基本上是一样的
System.Net.HttpWebRequest request;
request = (System.Net.HttpWebRequest)HttpWebRequest.Create(url);
//Post请求方式
request.Method = "POST";
// 内容类型
//request.ContentLength = 460;
request.ContentType = "application/json";
request.Accept = "application/json";
request.Headers.Add("connectapitoken", "DC5F8105-7717-4EA1-A4BF-0ED4-E85C2D77");
request.UserAgent = IE8;
//这是原始代码:
string paraUrlCoded = paras;// "p1=x&p2=y&p3=测试的中文";
byte[] payload;
//将URL编码后的字符串转化为字节
payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);//Encoding.ASCII.GetBytes(paraUrlCoded); ;//
//设置请求的 ContentLength
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 resst;
resst = response.GetResponseStream();

            //解压缩
            if (response.ContentEncoding.ToLower().Contains("gzip"))
            {
                resst = new GZipStream(resst, CompressionMode.Decompress);
            }
            StreamReader sr = new StreamReader(resst, Encoding.UTF8);
            string str = sr.ReadToEnd();

            return str;
支持(0) 反对(0) jianming2032 | 园豆:104 (初学一级) | 2018-09-27 11:22

@jianming2032: 那你调试的时候是那边出错了啊?

支持(0) 反对(0) 华临天下 | 园豆:1359 (小虾三级) | 2018-09-27 11:38

@华临天下: 嗯,已经可以了,谢谢,不是这个的问题,是提交的数据不对,多谢了

支持(0) 反对(0) jianming2032 | 园豆:104 (初学一级) | 2018-09-27 14:27
0

非常感谢各位的帮助,问题已经解决了。

jianming2032 | 园豆:104 (初学一级) | 2018-09-27 14:28
0

对于如何使用另一个接口的返回参数作为当前接口的Token发送Post请求,ApiPost也很好用而且很简单,有人想了解可以看下这个文章,我觉得写的很好。这个工具不难,易用性更强。https://mp.apipost.cn/a/b1c0cb1e60917430

Gina_61 | 园豆:204 (菜鸟二级) | 2020-05-22 16:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册