用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內核的控件都行,但願有大神知道其餘方法的也能夠留個言。工具