delphi 网上获取北京时间XMLHTTPRequest如何访问需要安全验证的网站


本文整理自网络,侵删。

 以下是在Delphi中的代码,在其他的语言或脚本如C# / JavaScript /  ASP.NET / ASP / PHP中也是一样的,XMLHTTPRequest的使用是通用的。
网上说可以直接这样:
[delphi] 
httpReq.open('Get',url,True,edt_User.Text,edt_Pwd.Text) //请不要在此放入验证用户和密码,会出错!  
这个在连接Restful服务中出错!发送Header信息就没有问题,EncodeString()是Delphi中进行Base64编码的函数,编码前的格式为:username:password
[delphi] view plain copy print?
UsrPwd_Base64 := edt_User.Text+':'+edt_Pwd.Text;  
UsrPwd_Base64 := 'Basic '+EncodeString(UsrPwd_Base64);//'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='  
HttpReq.setRequestHeader('Authorization', UsrPwd_Base64);  

完整代码如下:
[delphi] 
procedure TTestForm.ExecServerMethodByXMLHttp(const useGet: Boolean);  
var  
  url,UsrPwd_Base64: string;  
  HttpReq:IXMLHTTPRequest;  
  JsonParamStr:string;  
begin  
  Memo1.Lines.Clear;  
  Memo1.Lines.Add('XMLHTTPRequest '+RadioGroup1.Items[RadioGroup1.ItemIndex]+'方式:');  
  Memo1.Lines.Add('====================================');  
  
  HttpReq := CoXMLHTTP.Create;//早期版本如Delhp7中则为 HttpReq := CoXMLHTTPRequest.Create;  
  //两种提交请求的方式:Get和Post,Get是通过URL地址传递参数如果是中文需要转码,需要添加时间戳 Post不需要添加时间戳  
  //get url := 'http://localhost:5269/api/webmemberapi/NewMemberRegister?timestamp='+inttostr(Windows.GetTickCount);  
  url := edt_SrvIp.Text+':'+edt_Port.Text+'/peci/rest/TServerMethods/GetRoomInfo_ByRoom/';  
  url := url+GetParamStr_Delphi;  
  
  if useGet then  
  begin  
    //http get  
    if chk_Pwd.Checked then  
      //httpReq.open('Get',url,True,edt_User.Text,edt_Pwd.Text) //请不要在此放入验证用户和密码,会出错!  
      httpReq.open('Get',url,False,EmptyParam,EmptyParam)  
    else  
      httpReq.open('Get',url,False,EmptyParam,EmptyParam);  
  end else  
  begin  
    //http post 如用post方法实际上是调用updateGetRoomInfo_ByRoom,post方式会在函数名前加上update前缀  
    httpReq.open('Post', url, False, EmptyParam, EmptyParam);  
  end;  
  
    if chk_Pwd.Checked then //如果服务器需要验证用户,请把验证信息放入Header中。  
    begin  
      begin  
        UsrPwd_Base64 := edt_User.Text+':'+edt_Pwd.Text;  
        UsrPwd_Base64 := 'Basic '+EncodeString(UsrPwd_Base64);//'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='  
        HttpReq.setRequestHeader('Authorization', UsrPwd_Base64);  
      end;  
    end;  
  //HttpReq.setRequestHeader('Accept', 'application/x-www-form-urlencoded');  
  //HttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');  
  
  HttpReq.setRequestHeader('If-Modified-Since', '0');  
  HttpReq.setRequestHeader('Accept', 'application/json');  
  HttpReq.setRequestHeader('Content-Type', 'application/json');  
  HttpReq.setRequestHeader('Charset', 'utf-8');  
  //请求主体  
  try  
    if useGet then  
    begin  
      //http get 如果url中已包含了参数,则无需在此再次传递参数  
      HttpReq.send(EmptyStr);  
    end else  
    begin  
      //http post  
      JsonParamStr := GetParamStr_Json;//GetParamStr_Delphi;//  
      HttpReq.send(JsonParamStr);  
    end;  
  
  
    Memo1.Lines.Add(HttpReq.responseText);  
  except  
     on Ex:Exception do  
        Memo1.Lines.Add(Ex.Message);  
  end;  

end;  

 

 

来源:http://blog.csdn.net/xieyunc/article/details/73649723


相关阅读 >>

Delphi著名皮肤控件库大全评测

Delphi winapi: getparent - 获取指定窗口的父窗口句柄

Delphi执行查询语句时的进度条怎么做

Delphi获得文件的版本号

Delphi截取字符串

Delphi检查网络连接状态3种方式

Delphi fmx播放m4a声音文件

使用indy解决base64回车换行问题

crc32.pas

Delphi 键盘钩子的简单应用

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...