用delphi的idhttp Get一个url以下:
http://117.135.237.4:9090/agent/api/treatmentModeUpdate?userName=VDAwMIMQ==&userPwd=VDAjIxMQ==¢erNo=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, '<', '<', [rfReplaceAll]); source := StringReplace(source, '>', '>', [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内核的控件都行,但愿有大神知道其余方法的也能够留个言。工具