如何在请求后捕获 REST API 发送的响应令牌?
Posted
技术标签:
【中文标题】如何在请求后捕获 REST API 发送的响应令牌?【英文标题】:How to capture a response token sent by a REST API after a request? 【发布时间】:2015-09-18 20:38:23 【问题描述】:我正在使用 REST API,我正在使用基本身份验证,其中密码编码为 Base64,如下所示
private XmlDocument sendXMLRequest(string requestXml)
string destinationUrl = "https://serviceapi.testgroup.com/testtp/query";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("API_TEST_NR:Testnol1$"));
byte[] bytes;
bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
request.Method = "POST";
request.ContentLength = bytes.Length;
//request.Connection = "keep-alive";
request.ContentType = "text/xml";
request.KeepAlive = true;
request.Timeout = 2000;
request.MediaType = "text/xml";
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
HttpWebResponse response;
Stream responseStream;
using (response = (HttpWebResponse)request.GetResponse())
if (response.StatusCode == HttpStatusCode.OK)
responseStream = response.GetResponseStream();
XmlReader reader = new XmlTextReader(responseStream);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(reader);
try reader.Close();
catch
try responseStream.Close();
catch
try response.Close();
catch
return xmlDoc;
try response.Close();
catch
return null;
我是 Web Api 的新手,我知道 API 在根据 API 文档成功授权后会使用访问 x-token 进行响应,我不确定如何从 HTTP 标头访问或捕获它.
我可以知道实现此目的的好方法吗?
【问题讨论】:
【参考方案1】:这比我想象的用它的名字捕获要容易。
string xtoken= response.Headers["custom-header"];
Console.WriteLine(xtoken);
【讨论】:
【参考方案2】:尝试如下,表示,使用 WebRequest 类请求数据。在大多数情况下,WebRequest 类足以接收数据。但是,如果您需要设置特定于协议的属性,则必须将 WebRequest 转换为特定于协议的类型。例如,要访问 HttpWebRequest 的特定于 HTTP 的属性,请将 WebRequest 转换为 HttpWebRequest 引用。
private XmlDocument GetRootLevelServiceDocument(
string serviceEndPoint, string oAuthToken)
XmlDocument xmlDoc = new XmlDocument();
HttpWebRequest request = CreateHttpRequest(serviceEndPoint,
oAuthToken);
using (HttpWebResponse response =
(HttpWebResponse)request.GetResponse())
using (XmlReader reader =
XmlReader.Create(response.GetResponseStream(),
new XmlReaderSettings() CloseInput = true ))
xmlDoc.Load(reader);
string data = ReadResponse(response);
if (response.StatusCode != HttpStatusCode.OK)
LogMsg(string.Format("Error: 0", data));
LogMsg(string.Format(
"Unexpected status code returned: 0",
response.StatusCode));
return xmlDoc;
【讨论】:
为什么 OP 应该“试试这个”?一个好的答案总是会解释所做的事情以及这样做的原因,不仅适用于 OP,而且适用于 SO 的未来访问者。以上是关于如何在请求后捕获 REST API 发送的响应令牌?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ANGULAR 5 的 ARC 扩展发送 POST 请求以测试 api Rest?