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==

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

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

这个地址外网也可以打开,但是用delphi自带的Idhttp.get永远都会提示403,不管是D7,XE2,D10都试过了,都是403。

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

那也没啥办法,毕竟是跟人家对接,人家说了算,毕竟其他开发工具可以获取到错误信息,后来各种改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内核的控件都行,希望有大神知道其他方法的也可以留个言。

posted @ 2018-07-25 19:25  王云盼  阅读(323)  评论(0编辑  收藏  举报