1、Net的方式
要在发送请求的时候添加HTTP Basic Authentication认证信息到请求中,有两种方法:
一是在请求头中添加Authorization:
Authorization: "Basic 用户名和密码的base64加密字符串"
二是在url中添加用户名和密码:
http://userName:password@api.minicloud.com.cn/statuses/friends_timeline.xml
下面来看下对于第一种在请求中添加Authorization头部的各种语言的实现代码。
string username="username";
string password="password";
//注意这里的格式哦,为 "username:password"
string usernamePassword = username + ":" + password;
CredentialCache mycache = new CredentialCache();
mycache.Add(new Uri(url), "Basic", new NetworkCredential(username, password));
myReq.Credentials = mycache;
myReq.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(newASCIIEncoding().GetBytes(usernamePassword)));
WebResponse wr = myReq.GetResponse();
Stream receiveStream = wr.GetResponseStream();
StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);
string content = reader.ReadToEnd();
你当然也可以使用HttpWebRequest或者其他的类来发送请求。
2、源码实现:
WebReference.ExecutingServiceImplService client = new WebReference.ExecutingServiceImplService();
string uri = "http://10.8.200.888:8087/MM-MES-QQ/services/ExecutingService?wsdl";
CredentialCache mycache = new CredentialCache();
//设置访问接口 Preemptive
mycache.Add(new Uri(uri), "Basic", new NetworkCredential("userA001", "pass123"));
string usernamePassword = "userA001" + ":" + "pass@123";
client.Credentials = mycache;
client.PreAuthenticate = true; //设置预验证
WebRequest req = WebRequest.Create(new Uri(uri));
req.Credentials = mycache;
req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)));
string soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://service.cxf.core.bgy.com/\">" + "<soapenv:Header/>" +
"<soapenv:Body>" +
"<ser:execute>" +
"<pRequest>" +
"<plant>" + "123" + "</plant>" +
"<data>" + "123" + "</data>" +
"<serviceCode>" + "123" + "</serviceCode>" +
"</pRequest>" +
"</ser:execute>" +
"</soapenv:Body>" +
"</soapenv:Envelope>";
//将SOAP字符串信息转换成Byte数组,用于后面的流传输
byte[] bytData = Encoding.UTF8.GetBytes(soap.ToString());
req.Method = "POST";//POST方式传输
req.ContentType = "text/xml; charset=utf-8";//传输内容类型及编码格式
req.ContentLength = bytData.Length;//传输内容长
Stream newStream = req.GetRequestStream();
//将数据写入该流
newStream.Write(bytData, 0, bytData.Length);//写入参数
newStream.Close();
WebResponse wr = req.GetResponse();
Stream receiveStream = wr.GetResponseStream();
StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);
string content = reader.ReadToEnd();