从 Python-mechanize 调用 GWT RPC 函数
我收到 500 :内部错误,POST 的有效负载绝对是正确的,我注意到的一件事是 Content-Type 没有使用 b.addheaders = [(' Content-Type',"text-x-gwt-rpc")]
- 我不知道为什么。
有没有人有快速/脏代码用于使用 mechanize 在 Python 中访问 GWT RPC(即模拟 GWT 客户端)。浏览器?
I am getting a 500 : Internal error, the payload of the POST is definately right, one thing I noticed is the Content-Type is not "sticking" using b.addheaders = [('Content-Type',"text-x-gwt-rpc")]
-- and I'm not sure why.
Does anyone have quick/dirty code used to access a GWT RPC (i.e. emulate the GWT client) in Python using mechanize. Browser?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请勿使用非 GWT 解决方案中的 GWT-RPC,该格式是内部格式,如有更改,恕不另行通知。考虑对应用程序进行 REST 化(或使用 SOAP 并重用方法的现有代码,但需要注意接口定义)。
Do not use GWT-RPC from non-GWT solutions, the format is internal and subject to change without notice. Consider RESTifying the app (or use SOAP and reuse the existing code of the methods, but care needs to be given to the interface definitions).
问题的答案是 GWT 要求 content-type 为 x-gwt-rpc;而不是“application/x-www-form-urlencoded”;它被硬编码在 mechanize 库的 _http.py 中。
快速而肮脏的 hack 是将其更改为 text/x-gwt-rpc; charset=UTF-8——我确信通过子类化 AbstractHTTPHandler 可以做得更好;也许其他人可以提供一种快速的方法来做到这一点。
The answer to the question is GWT requires the content-type to be x-gwt-rpc; rather than 'application/x-www-form-urlencoded'; which is hard coded in _http.py in the mechanize library.
Quick and dirty hack is to change this to text/x-gwt-rpc; charset=UTF-8 -- I'm sure this could be done better by subclassing AbstractHTTPHandler; maybe someone else could contribute a quick way to do that.