使用 UserAgent 要求连接到 RETS 服务器
Connecting to RETS Servers with UserAgent Requirement
我希望这里有人熟悉称为 RETS 的房地产数据标准。全国房地产经纪人协会提供了一个 dll 来连接他们名为 libRETS 的服务,但它不像以前那样得到支持,最近的事件促使我们创建自己的作为替代品。出于后勤原因,我们无法在 Core 中执行此操作,并且正在使用当前的 C#.Net 4.7.2。
有 2 种或 3 种不同的 "security levels" 用于连接到 RETS 服务器,方法是从一个 MLS 到下一个 MLS 的每个案例。我们可以成功地连接到那些只需要登录名和密码的人,但在那些还需要所谓的 UserAgent 和 UserAgentPassword 的人身上遇到了障碍,它们必须以某种方式使用 Md5 加密传递。服务器正在返回:
远程服务器返回错误:(401) 未经授权。
private WebResponse GetLoginBasicResponse()//*** THIS ONE WORKS ***
{
try
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var request = (HttpWebRequest)WebRequest.Create(new Uri(_cred.loginUri));
request.Method = "GET";
request.Headers.Add("RETS-Version", _retsVersion);
request.Credentials = new NetworkCredential(_login, _password);
return request.GetResponse();
}
catch (Exception ex)
{
string ignore = ex.Message;
return null;
}
}
private WebResponse GetLoginWithUserAgentResponse()//*** THIS ONE DOES NOT WORK ***
{
try
{
// ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var request = (HttpWebRequest)WebRequest.Create(new Uri(_cred.loginUri));
request.Method = "GET";
request.Headers.Add("RETS-Version", _retsVersion);
if (!string.IsNullOrEmpty(_cred.userAgent))
{
request.UserAgent = Md5(_cred.userAgent + ":" + _cred.userAgentPassword);
//request.Headers.Add("RETS-UA-Authorization", "Digest " + Md5(_cred.userAgent + ":" + _cred.userAgentPassword));
}
request.Credentials = new NetworkCredential(_login, _password);
return request.GetResponse();
}
catch (Exception ex)
{
string ignore = ex.Message;
return null;
}
}
public string Md5(string input) //*** Borrowed this from from .NET Core Project and presume it works
{
// Use input string to calculate MD5 hash
using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
{
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
// Convert the byte array to hexadecimal string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2"));
}
return sb.ToString();
}
}
本文档的第 20 页介绍了如何构建 UA header:https://www.ranww.org/documents/resources/rets_1_8.pdf
您还需要添加一些其他字段。
我们无法解决 .NET 中的问题,但在 GitHub 中找到了一个我们正在使用的 .NET Core 项目。 https://github.com/CrestApps/RetsConnector
这个案例可以结案
没有看到 "Mark as Answer" 的选项。已尝试 MS Edge 和 Google Chrome
我希望这里有人熟悉称为 RETS 的房地产数据标准。全国房地产经纪人协会提供了一个 dll 来连接他们名为 libRETS 的服务,但它不像以前那样得到支持,最近的事件促使我们创建自己的作为替代品。出于后勤原因,我们无法在 Core 中执行此操作,并且正在使用当前的 C#.Net 4.7.2。
有 2 种或 3 种不同的 "security levels" 用于连接到 RETS 服务器,方法是从一个 MLS 到下一个 MLS 的每个案例。我们可以成功地连接到那些只需要登录名和密码的人,但在那些还需要所谓的 UserAgent 和 UserAgentPassword 的人身上遇到了障碍,它们必须以某种方式使用 Md5 加密传递。服务器正在返回:
远程服务器返回错误:(401) 未经授权。
private WebResponse GetLoginBasicResponse()//*** THIS ONE WORKS ***
{
try
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var request = (HttpWebRequest)WebRequest.Create(new Uri(_cred.loginUri));
request.Method = "GET";
request.Headers.Add("RETS-Version", _retsVersion);
request.Credentials = new NetworkCredential(_login, _password);
return request.GetResponse();
}
catch (Exception ex)
{
string ignore = ex.Message;
return null;
}
}
private WebResponse GetLoginWithUserAgentResponse()//*** THIS ONE DOES NOT WORK ***
{
try
{
// ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var request = (HttpWebRequest)WebRequest.Create(new Uri(_cred.loginUri));
request.Method = "GET";
request.Headers.Add("RETS-Version", _retsVersion);
if (!string.IsNullOrEmpty(_cred.userAgent))
{
request.UserAgent = Md5(_cred.userAgent + ":" + _cred.userAgentPassword);
//request.Headers.Add("RETS-UA-Authorization", "Digest " + Md5(_cred.userAgent + ":" + _cred.userAgentPassword));
}
request.Credentials = new NetworkCredential(_login, _password);
return request.GetResponse();
}
catch (Exception ex)
{
string ignore = ex.Message;
return null;
}
}
public string Md5(string input) //*** Borrowed this from from .NET Core Project and presume it works
{
// Use input string to calculate MD5 hash
using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
{
byte[] inputBytes = Encoding.ASCII.GetBytes(input);
byte[] hashBytes = md5.ComputeHash(inputBytes);
// Convert the byte array to hexadecimal string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2"));
}
return sb.ToString();
}
}
本文档的第 20 页介绍了如何构建 UA header:https://www.ranww.org/documents/resources/rets_1_8.pdf
您还需要添加一些其他字段。
我们无法解决 .NET 中的问题,但在 GitHub 中找到了一个我们正在使用的 .NET Core 项目。 https://github.com/CrestApps/RetsConnector
这个案例可以结案
没有看到 "Mark as Answer" 的选项。已尝试 MS Edge 和 Google Chrome