PHP - 无法通过 PHRETS 连接到 RETS
PHP - Cant connect to RETS via PHRETS
我正在尝试使用从此处下载的 PHRETS 通过 PHP 获取我所有的 MLS 列表:
https://github.com/dangodev/PHRETS-Example/blob/master/lib/phrets.php
并且我使用此示例将我的列表下载为 csv 格式:
我从我的 MLS 板上获得了 RETS URL、用户名和密码,但我仍然无法连接。
我的代码 returns 在此处调用 PHRETS 库时为假:
require_once("phrets.php");
// start rets connection
$rets = new phRETS;
echo "+ Connecting to {$rets_login_url} as {$rets_username}<br>\n";
$connect = $rets->Connect($rets_login_url, $rets_username, $rets_password);
if ($connect) {
echo " + Connected<br>\n";
}
else {
echo " + Not connected:<br>\n";
print_r($rets->Error());
exit;
}
当我转到库并查看方法 Connect 时,此处的代码 returns 为 false:
// make request to Login transaction
$result = $this->RETSRequest($this->capability_url['Login']);
if (!$result) {
return false;
}
当我查看我的 RETSRequest 方法时,它 returns 在这里是错误的,因为响应代码是 0 而不是 200
if ($response_code != 200) {
$this->set_error_info("http", $response_code, $response_body);
return false;
}
这是它尝试连接的地方:
if ($this->ua_auth == true) {
$session_id_to_calculate_with = "";
// calculate RETS-UA-Authorization header
$ua_a1 = md5($this->static_headers['User-Agent'] .':'. $this->ua_pwd);
$session_id_to_calculate_with = ($this->use_interealty_ua_auth == true) ? "" : $this->session_id;
$ua_dig_resp = md5(trim($ua_a1) .':'. trim($this->request_id) .':'. trim($session_id_to_calculate_with) .':'. trim($this->static_headers['RETS-Version']));
$request_headers .= "RETS-UA-Authorization: Digest {$ua_dig_resp}\r\n";
}
$this->last_request_url = $request_url;
curl_setopt($this->ch, CURLOPT_URL, $request_url);
curl_setopt($this->ch, CURLOPT_HTTPHEADER, array(trim($request_headers)));
// do it
$response_body = curl_exec($this->ch);
$response_code = curl_getinfo($this->ch, CURLINFO_HTTP_CODE);
为什么我无法连接?
我能够使用 url、用户名和密码通过 http://retsmd.com 登录。我真的需要以 CSV 格式获取我的列表。
请帮忙
我的服务器上确实安装了curl,我用这个方法检查过:
Check to see if cURL is installed locally?
响应代码 0 通常表示您的服务器未能打开与该服务器的连接,可能是由于您与他们之间的防火墙问题。一些 RETS 服务器仍然 运行 在端口 6103 上,因此如果您的服务器(托管公司等)阻止在该端口上打开出站连接,这可能是您所看到的原因。
我建议您从没有任何连接限制的其他服务器或计算机上尝试您的代码示例。您也可以尝试 https://retsmd.com/auth 来验证您获得的凭据是否有效(假设您的本地环境具有 PHRETS 所需的条件 运行)。
添加到 troydavisson 的回答中,
您可以包含以下额外的代码行来获取您的连接日志以检查问题。
// start rets connection
$rets = new phRETS;
$rets->SetParam('debug_mode', true);//extra line of code to get log
您将在 rets_debug.txt 文件中获得完整日志。
我正在尝试使用从此处下载的 PHRETS 通过 PHP 获取我所有的 MLS 列表:
https://github.com/dangodev/PHRETS-Example/blob/master/lib/phrets.php
并且我使用此示例将我的列表下载为 csv 格式:
我从我的 MLS 板上获得了 RETS URL、用户名和密码,但我仍然无法连接。
我的代码 returns 在此处调用 PHRETS 库时为假:
require_once("phrets.php");
// start rets connection
$rets = new phRETS;
echo "+ Connecting to {$rets_login_url} as {$rets_username}<br>\n";
$connect = $rets->Connect($rets_login_url, $rets_username, $rets_password);
if ($connect) {
echo " + Connected<br>\n";
}
else {
echo " + Not connected:<br>\n";
print_r($rets->Error());
exit;
}
当我转到库并查看方法 Connect 时,此处的代码 returns 为 false:
// make request to Login transaction
$result = $this->RETSRequest($this->capability_url['Login']);
if (!$result) {
return false;
}
当我查看我的 RETSRequest 方法时,它 returns 在这里是错误的,因为响应代码是 0 而不是 200
if ($response_code != 200) {
$this->set_error_info("http", $response_code, $response_body);
return false;
}
这是它尝试连接的地方:
if ($this->ua_auth == true) {
$session_id_to_calculate_with = "";
// calculate RETS-UA-Authorization header
$ua_a1 = md5($this->static_headers['User-Agent'] .':'. $this->ua_pwd);
$session_id_to_calculate_with = ($this->use_interealty_ua_auth == true) ? "" : $this->session_id;
$ua_dig_resp = md5(trim($ua_a1) .':'. trim($this->request_id) .':'. trim($session_id_to_calculate_with) .':'. trim($this->static_headers['RETS-Version']));
$request_headers .= "RETS-UA-Authorization: Digest {$ua_dig_resp}\r\n";
}
$this->last_request_url = $request_url;
curl_setopt($this->ch, CURLOPT_URL, $request_url);
curl_setopt($this->ch, CURLOPT_HTTPHEADER, array(trim($request_headers)));
// do it
$response_body = curl_exec($this->ch);
$response_code = curl_getinfo($this->ch, CURLINFO_HTTP_CODE);
为什么我无法连接?
我能够使用 url、用户名和密码通过 http://retsmd.com 登录。我真的需要以 CSV 格式获取我的列表。
请帮忙
我的服务器上确实安装了curl,我用这个方法检查过:
Check to see if cURL is installed locally?
响应代码 0 通常表示您的服务器未能打开与该服务器的连接,可能是由于您与他们之间的防火墙问题。一些 RETS 服务器仍然 运行 在端口 6103 上,因此如果您的服务器(托管公司等)阻止在该端口上打开出站连接,这可能是您所看到的原因。
我建议您从没有任何连接限制的其他服务器或计算机上尝试您的代码示例。您也可以尝试 https://retsmd.com/auth 来验证您获得的凭据是否有效(假设您的本地环境具有 PHRETS 所需的条件 运行)。
添加到 troydavisson 的回答中,
您可以包含以下额外的代码行来获取您的连接日志以检查问题。
// start rets connection
$rets = new phRETS;
$rets->SetParam('debug_mode', true);//extra line of code to get log
您将在 rets_debug.txt 文件中获得完整日志。