delphi http 403 获取不到服务器返回的错误消息 用浏览器打开url能够返回

用delphi的idhttp Get一个url以下:
  http://117.135.237.4:9090/agent/api/treatmentModeUpdate?userName=VDAwMIMQ==&userPwd=VDAjIxMQ==&centerNo=NTIyMj2&hospCode=Nz3MA==&Year=MjAxOA==html

用浏览器打开这个地址,服务器会返回如下json字样:web

  {"Message":"ob7FqbrPvdO/2szhyr6hvzrK/b7dv+LE2rK/yv2+3dPQs+XNu6Osx+vBqs+1vqfG5srbuvPIy9Sx"}chrome

这个地址外网也能够打开,可是用delphi自带的Idhttp.get永远都会提示403,无论是D7,XE2,D10都试过了,都是403。json

  用IE打开此URL也照样会提示403,这样,我就放心了,毕竟不是我本身的问题,连微软也是同样,http也是用的微软的IE内核,这我也改不了的(可能有大神能够改,我能力还不够)      对接方只说了句:不兼容IE,用360浏览器(此时我内伤多少个CNM崩腾而过。。。。。连IE都不支持,什么LJ软件)api

那也没啥办法,毕竟是跟人家对接,人家说了算,毕竟其余开发工具能够获取到错误信息,后来各类改HTTP的IdHTTP1.Request.UserAgent 属性,改源码,仍是不行,用webbrowser1也不行,毕竟也是用的IE内核。浏览器

而后安装了dcef3控件(具体下载地址搜索dcef3下载就有,这里推荐个地址:https://blog.csdn.net/risesoft2012/article/details/53333583 安装方法,使用方法说的很详细了),用了Chrome浏览器控件,发现是能够返回错误信息的,那么至少仍是有点但愿了服务器

直接贴代码,控件自带的demo都很全,先放个Chromium1控件,而后两个按钮,一个是加载网址,一个是获取返回数据,个人目的也只是获取到返回的那个信息而已,够用。。。函数

//回调函数,获取chrome加载地址的返回值
procedure
CallbackGetText(const txt: ustring); var source: ustring; ss: TStrings; begin source := txt; source := StringReplace(source, '<', '&lt;', [rfReplaceAll]); source := StringReplace(source, '>', '&gt;', [rfReplaceAll]); Form3.Memo1.Text := source; ss := TStringList.Create; ss.Text := source; ss.SaveToFile('source.txt'); // source := '<html><body>Text:<pre>' + source + '</pre></body></html>'; // Form3.Chromium1.Browser.MainFrame.LoadString(source, 'source://text'); end;
//加载URL
procedure TForm3.Button1Click(Sender: TObject); begin Chromium1.Browser.MainFrame.LoadUrl('about:blank'); //第一次必须先加载空白页,才能浏览其余网页 Chromium1.Browser.MainFrame.LoadUrl(Edit1.Text ); Chromium1.Browser.MainFrame.GetTextProc(CallbackGetText); end; //调用回调,获取返回信息 procedure TForm3.Button2Click(Sender: TObject); begin Chromium1.Browser.MainFrame.GetTextProc(CallbackGetText); end;

正常的地址用idhttp.get()是彻底能够实现的,不必这么折腾,这是没办法了,我想应该还有其余的办法,或按照其余http控件,只要不是IE内核的控件都行,但愿有大神知道其余方法的也能够留个言。工具

相关文章
相关标签/搜索