技巧http http headerfield约束的方法?

22意见(过去30天)
Paul Shoemaker.
Paul Shoemaker. 2019年8月24日
嘿,伙计们,
Webwrite不能满足我将数据发布到RESTful web服务的需求,所以我决定使用较低级的matlab.net.http.RequestMessage功能,它有时可以工作,但使用我的授权令牌设置Header有时会失败,这取决于我得到的令牌。
URL =“https://api.tdameritrade.com/v1/accounts/1234567890/orders”;
r = matlab.net.http.RequestMessage;
r.method ='邮政';
R.Header(1).name =“授权”;
R.Header(1).Value =“持票人”+令牌;令牌很长,并且定期更改。**通常** Matlab抛出错误
问题在设置标题时,该标题需要一个名为“授权”的字段名称以及“持票人”+令牌的值。“令牌”值非常冗长,大约1,200个字符(此帖子底部的示例),我必须每30分钟获得一个新的一个,以继续访问此服务。有时Matlab是好的并接受令牌,但是当我尝试设置值时,大多数令牌都被拒绝,给我一个如下所示的错误:
屏幕截图2019-08-23在7.47.13 pm.png
Matlab类标题在值下明确执行验证例程,并确定它无效。
这是我尝试的:
  1. 在“持票人”后删除空间,或使用“持票人%20”或“持票人+”。Matlab接受此功能,但随后Web服务器返回“未经授权”
  2. 我已经注意到,如果我在令牌的前1,144个字符,然后Matlab接受(例如。“无记名”+令牌(1:1144),但当然web服务器返回“未授权”,因为我没有提供完整的令牌
如何输入“持票人”+令牌的任何想法,以避免上述错误?
这是一个示例令牌(我改变了一个角色,只是为了确保没有人可以使用它):
令牌=“zgzMa4kOwPmVxbQ3tp0unIp4JIXv1Hzh7fzRs3JmQbTnPVFeXX7oF2pJH + 3 gl4kyefxfiuil7ikhojrudxe0hxnu0yn + Gn9cZUyU / eovZVyG4kVTqu47hyDnNkq0C1gShWhBtWcvI8uKjzHjGMJP8Ot2Gjhbw3 l6YfQe3q3PBQ + 6 wlssv7ghbm406pukldql7schtpvrqli8h308g7oivrtjb2oxgqfivggdybqnuw6igamxjuqoz8fv8perapg92it8b1p1sw5lfq5vpu6n2pfgkhosilmw0az + aq03R9V8FYFsZ30 / jrNqSxllf3WFELkVYlJlGNOvudzIzJwANcfcl4UzvDYpduN33lOarpIK3a17tRlsjIimtgiLhyxEYlUnVLiuwI5l1 + 9 tkj0hjc3asel6kwj + ysW5gx36YWyb8tbhOz5I5wFkqGkcjZNJjUQ12Ou4 + DVG / tCwhCHwJOR + x8imWbZqTcDwNRMKyQkn1CXSY463Ycxf3XE6boRBkK2OtAQ / m4Q276i26HhRGjuMFfDW1fzCrrXy23zERVAkAo9t100MQuG4LYrgoVi / JHHvlwCIoz + tGIgiaHeuLUSTR / PGs5RLwaXaMkRXixdeWNw5qOODbq9fsFHe0zBCweEkN8CK5Uxa3 + FXv3OtlJUDZ8Pytum96pRkgDPvib1n2sDmtV0DgHc1q2zJqfitAcfS3lmIYPx7RcGBHJV / jn1Ojp6mcN9tu0C8S7u Mk4gqV + dwkdLIICRGe3u2ASbsX6j16Nrbv + XHy9sxQRVh0eWpvLppM0ICBlSxrZ6qr / d6pYqn505fB6gICX0D + 326 pfzf fgcyLnfGjCaHv9v5qMv0LTNooGYZ5BguM4IZGOCts4h + / zm3wGCchBczi3BWh / AXw + fNro1TOAkGDdzshZs6GyBoo52vziYR319E / pep9qDs0talrh1OJGnOOquBhnqY9ej2kzQdDtf3sBxQjSXn3JEIlAcszSCQbPDwwrr5sPDMWuhHsgbuU1 + CIGOPEKiL0zi57fne5zTjAvMBov8 / FWmCULZ + dEGRiBfdqK4OJMyZn8Kpcq + oN2JYSOBcE + c / 6 y3xrojw / 8 d1u + Hvb2sYhWk / f1hYh2AHDO2dwlbCoRtPipQ = = 212 fd3x19z9swbhdjacbc00b75e”
请注意,我可以将标题与webwrite设置并成功使用这种方式,但不幸的是使用webwrite时的响应是空的,我需要从上面描述的非网写方法返回的信息。
谢谢,
保罗S.

接受答案

Paul Shoemaker.
Paul Shoemaker. 2019年8月24日
嘿,伙计们,
我想我可能已经解决了这个问题。诀窍似乎是创建一个永久性的对象,它不会验证提供的值。然后将Genericheader字段分配给RequestMessage标题。
它是这样的:
URL =“https://api.tdameritrade.com/v1/accounts/1234567890/orders”;
r = matlab.net.http.RequestMessage;
r.method ='邮政';
genericheader = matlab.net.http.field.genericField('授权'“持票人”+令牌);%这绕过了matlab值验证
R.Header = Genericheader;%分配给RequestMessage。幸运的是,RequestMessage类接受泛型标题对象
R.Body(1).data =命令;%交易/订单后
Response = R.Send(URL);%类似于魅力和输出包含我需要的信息。
我希望这能帮助到其他人。
保罗S.
3评论
NICKOLAS LASORTE.
NICKOLAS LASORTE. 20月10日10日
保罗,
您能为您分享更多代码,为您提供TD Ameritrade API通话吗?
谢谢
尼克

登录评论。

更多答案(0)

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!