Я прочитал несколько сообщений по этой проблеме, но я просто не могу взломать этот орех.
Я пытаюсь заставить PHP Curl эмулировать этот запрос веб-браузера:
https://www.endomondo.com/embed/user/workouts/?id=747232&measure=0&width=450&height=400&page=0&language=DA
(Я удалил все куки до этого запроса)
Когда я получаю доступ к URL из браузера, я получаю код состояния 200, и все в порядке. Однако, когда я использую PHP Curl, я получаю код состояния 403, который указывает, что сервер по какой-то причине отклоняет мой запрос.
Вот мой PHP-код:
$curl_cookie = tempnam("/tmp", "tmpcookie.txt");
$curl_url = 'https://www.endomondo.com/embed/user/workouts/?' . http_build_query(Array('id' => 747234 , 'measure' => 0 , 'width' => 450 , 'height' => 400 , 'page' => 0, 'language' => 'DA'));
$curl_header = array(
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Encoding: gzip, deflate, br",
"Accept-Language: en,da;q=0.7,en-US;q=0.3",
"Cache-Control: max-age=0",
"Connection: keep-alive",
"DNT: 1",
"Upgrade-Insecure-Requests: 1",
"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"
);
$curl_options = array(
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POST => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_HEADER => true,
CURLINFO_HEADER_OUT => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_AUTOREFERER => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_MAXREDIRS => 10,
CURLOPT_URL => $curl_url,
CURLOPT_HTTPHEADER => $curl_header,
CURLOPT_COOKIESESSION => true,
CURLOPT_COOKIEFILE => "",
CURLOPT_COOKIEJAR => $curl_cookie,
CURLOPT_VERBOSE => true
);
$ch = curl_init();
curl_setopt_array( $ch, $curl_options );
$ch_content = curl_exec($ch);
$ch_err = curl_errno($ch);
$ch_errmsg = curl_error($ch);
$ch_header = curl_getinfo($ch);
curl_close($ch);
echo "ERROR_NO : " .$ch_err;
echo "ERROR_MSG : " .$ch_errmsg;
print_r ($ch_header);
echo $ch_content;
Я сравнил заголовок веб-запроса с заголовком запроса PHP Curl. Они следующие:
Заголовок HTTP-запроса из веб-запроса (копируется из режима отладки Firefox):
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en,da;q=0.7,en-US;q=0.3
Cache-Control: max-age=0
Connection: keep-alive
DNT: 1
Host: www.endomondo.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0
Заголовок HTTP из запроса PHP Curl:
GET /embed/user/workouts/?id=747232&measure=0&width=450&height=400&page=0&language=DA HTTP/1.1
Host: www.endomondo.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en,da;q=0.7,en-US;q=0.3
Cache-Control: max-age=0
Connection: keep-alive
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0
Почему Endomondo отклоняет мой запрос? Может ли он заблокировать запрос на основе IP-адреса моего сервера или что-то в этом роде?