用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内核的控件都行,希望有大神知道其他方法的也可以留个言。

delphi http 403 获取不到服务器返回的错误消息 用浏览器打开url可以返回的更多相关文章

  1. 浏览器输入URL到返回页面的全过程

    [问题描述] 在浏览器输入www.baidu.com,然后,浏览器显示相应的百度页面,这个过程究竟发生了什么呢? [第一步,解析域名,找到主机] 正常情况下,浏览器会缓存DNS一段时间,一般2分钟到3 ...

  2. HTTP工作过程(浏览器输入URL到返回HTML页面都经历了什么)

    超文本传送协议(HyperText Transport Protocol,HTTP)是互联网上应用最为广泛的一种网络协议,它工作在应用层,使用TCP的80号端口提供服务.并且HTTP是工作在客户/服务 ...

  3. HTTP请求中带有特殊字符"|",返回400错误

    Java平台,服务器是Tomcat8,前端ajax访问服务器时,F12返回400错误,经分析,URL地址中get传参值里面含有“|“, Invalid character found and RFC ...

  4. 获取小众ftp服务器指定目录内容列表

    今天获取小众ftp服务器指定目录内容列表时费劲急了. ///parama url="ftp://x.x.x.x/dir_name" public string GetFTPDir( ...

  5. 正向代理 forward proxy、反向代理 reverse proxy、透明代理 transparent proxy nginx反向代理原理和配置讲解 防止外部客户机获取内部内容服务器的重定向 URL 缓存命中

    [大型网站技术实践]初级篇:借助Nginx搭建反向代理服务器 - Edison Chou - 博客园http://www.cnblogs.com/edisonchou/p/4126742.html 图 ...

  6. 微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。

    在这里给大家分享下我的心得,1.写代码前一定要对整个流程有个了解.我就是因为在先不了解整个过程中去ctrl+c+v他人的博客代码,花费很多无用的时间去处理还不知道能不能跑的起来的代码. 2.本人比较喜 ...

  7. Delphi 版本信息获取函数 GetFileVersionInfo、GetFileVersionInfoSize、VerFindFile、VerInstallFile和VerQueryValue

    一.版本信息获取函数简介和作用 获取文件版本信息的作用: 1. 避免在新版本的组件上安装旧版本的相同组件: 2. 在多语言系统环境中,操作系统根据文件版本信息里提供的语言信息在启动程序时决定使用的正确 ...

  8. Java Web项目获取客户端和服务器的IP地址

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  9. vs2015启动网站调试提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容。 解决方法

    今天安装了vs2015 下载一个项目进行试用,启动调试的时候提示 HTTP 错误 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容. 最可能的原因: 没有为请求的 URL ...

随机推荐

  1. js 按字段分组

    var data = [{"id":"32b80b76-a81e-4545-8065-1e7c57180801","userId":&quo ...

  2. ggplot map

    ggplot {ggplot2} R Documentation Create a new ggplot Description ggplot() initializes a ggplot objec ...

  3. 搭建 redis 集群 (redis-cluster)

    一 所需软件:Redis.Ruby语言运行环境.Redis的Ruby驱动redis-xxxx.gem.创建Redis集群的工具redis-trib.rb 二 安装配置redis  redis下载地址 ...

  4. vba截屏保存

    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVa ...

  5. Linux 移除python Error: Trying to remove “yum”, which is protected

    >yum intall python >yum -y remove python 出现Error: Trying to remove "yum", which is p ...

  6. 怎么查看在centos中创建的用户组

    用户列表文件:/etc/passwd 用户组列表文件:/etc/group 查看系统中有哪些用户:cut -d : -f 1 /etc/passwd 查看可以登录系统的用户:cat /etc/pass ...

  7. NBU 还原windows ORACLE数据库(EC)

    rman target / startup nomount; run{ allocate channel ch00 type 'SBT_TAPE'; send 'nb_ora_serv=nbumast ...

  8. 数据库 alert.log 日志中出现 "[Oracle][ODBC SQL Server Wire Protocol driver][SQL Server] 'RECOVER'"报错信息

    现象描述: (1).数据库通过调用透明网络实现分布式事务,但透明网关停用后,失败的分布式事务并未清理. (2).数据库 alert 日志 Thu Sep 06 06:53:00 2018 Errors ...

  9. overloading与overriding的区别

    overloading: “重载”,参数和返回值可改变. overriding: “覆盖”,重写父类的虚函数,参数和返回值必须与父类相同. 重写Overriding是父类与子类之间多态性的一种表现,重 ...

  10. 解压*.tar.bz2的坑

    下了一个压缩包,tar -xf 解压不了 解决办法: 装了bzip2工具 bzip2 -d **.tar.bz2 //将文件解压成**.tar tar -xf **.tar //解包 听说可以 tar ...