XMLHTTPRequest如何访问需要安全验证的网站

来源:互联网 发布:淘宝店铺复古港风推荐 编辑:程序博客网 时间:2024/06/15 18:53

以下是在Delphi中的代码,在其他的语言或脚本如C# / JavaScript /  ASP.NET / ASP / PHP中也是一样的,XMLHTTPRequest的使用是通用的。

网上说可以直接这样:

        httpReq.open('Get',url,True,edt_User.Text,edt_Pwd.Text) //请不要在此放入验证用户和密码,会出错!
这个在连接Restful服务中出错!发送Header信息就没有问题,EncodeString()是Delphi中进行Base64编码的函数,编码前的格式为:username:password

        UsrPwd_Base64 := edt_User.Text+':'+edt_Pwd.Text;        UsrPwd_Base64 := 'Basic '+EncodeString(UsrPwd_Base64);//'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='        HttpReq.setRequestHeader('Authorization', UsrPwd_Base64);


完整代码如下:

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;


原创粉丝点击