MAMP 上的 cURL 不起作用,但相同的脚本在带有 Apache 的服务器上工作



>我已经编写了登录到站点的php脚本,转到特定选项卡并拉取xlsx文件。

该脚本是在 MAMP 上编写和测试的,然后移动到生产服务器 (Apache(。 它仍然适用于生产服务器,但完全相同的脚本不适用于 MAMP(本地主机(。

更改的是: 目前的 MAMP 5.6 以前是旧的。我也在使用MacOS Catalina(新电脑(。

我检查了防火墙并在不同的网络等上进行了测试。 我找不到问题。

有什么建议吗?

更新: 我没有收到任何错误,它只是不返回任何内容。

我用来进行 cURL 调用的函数:


$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_NOBODY, 0);
curl_setopt($curl, CURLOPT_VERBOSE, 0);
curl_setopt($curl, CURLOPT_HTTPHEADER, $login_request_headers);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_jar_location);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar_location);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, $post);
curl_setopt($curl, CURLOPT_HTTPGET, $get);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, $return_transfer);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, $follow_acction);
return $result = curl_exec($curl);
curl_close($curl);
}
public function request_post($url, $login_request_headers, $post, $get, $follow_acction, $return_transfer, $cookie_jar_location, $post_data) {
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_NOBODY, 0);
curl_setopt($curl, CURLOPT_VERBOSE, 0);
curl_setopt($curl, CURLOPT_HTTPHEADER, $login_request_headers);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_jar_location);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar_location);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post_data));
curl_setopt($curl, CURLOPT_POST, $post);
curl_setopt($curl, CURLOPT_HTTPGET, $get);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, $return_transfer);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, $follow_acction);
return $result = curl_exec($curl);
curl_close($curl);
}

用于调用的代码:

//------call to login url------
$site_url1 = "https://app.xyz.com/";
$login_request_headers1 = [
'Host: app.xyz.com',
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:69.0) Gecko/20100101 Firefox/69.0',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: en-US,en;q=0.5',
'DNT: 1',
'Connection: keep-alive',
'Upgrade-Insecure-Requests: 1'
];
$functions->request_get($site_url1, $login_request_headers1, 0, 1, 0, 0, $cookie_jar_location);
$cookie_file_content1 = file_get_contents($cookie_jar_location);
$strlen = strlen($cookie_file_content1);
$cake_php = trim(substr($cookie_file_content1, $strlen-27));
//------call to POST login process------
$site_url2 = "https://app.xyz.com/";
$login_post_array = array("_method" => "POST", "data[User][username]" => SC_USER, "data[User][password]" => SC_PASS);
$login_request_headers2 = [
'Host: app.xyz.com',
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:69.0) Gecko/20100101 Firefox/69.0',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: en-US,en;q=0.5',
'Referer: https://app.xyz.com/',
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.strlen(http_build_query($login_post_array)),
'DNT: 1',
'Connection: keep-alive',
'Cookie: CAKEPHP='.$cake_php,
'Upgrade-Insecure-Requests: 1'
];
$functions->request_post($site_url2, $login_request_headers2, 1, 0, 0, 0, $cookie_jar_location, $login_post_array);
//------call to GET client site ()------
$site_url4 = "https://clients.xyz.com/";
$login_request_headers4 = [
'Host: clients.xyz.com',
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:69.0) Gecko/20100101 Firefox/69.0',
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: en-US,en;q=0.5',
'Referer: https://app.xyz.com/',
'DNT: 1',
'Connection: keep-alive',
'Cookie: CAKEPHP='.$cake_php.'; loggedIn[username]=test%40email.com; loggedIn[password]=testpassword',
'Upgrade-Insecure-Requests: 1'
];
$functions->request_get($site_url4, $login_request_headers4, 0, 1, 0, 0, $cookie_jar_location);

你的php脚本没有任何问题。 问题与 MAMP 配置有关

您必须将请求发送到 IP 而不是本地地址(例如 example.local(

转到 MAMP ->选择您的服务器 -> 从 IP 地址(默认情况下选择 *(,选择一个 IP 地址 -> 将端口号设置为任意数字。

例如,如果 MAMP 为您提供一个 IP 地址:192.168.2.44,并且您将端口设置为 3344,则必须像这样使用它:

$site_url1 = "http://192.168.2.44:3344";

另请注意:

如果启用了 MAMP SSL,则必须禁用它。 因为它不适用于 MAMP SSL

最新更新