#php #curl
#php #curl
Вопрос:
Сайт, к которому я пытаюсь получить доступ, добавляет строку запроса в конец URL-адреса, строка запроса уникальна для идентификатора сеанса. Я хочу опубликовать правильный URL-адрес, в конце которого есть строка запроса, но он просто переходит к базовому URL.
$curlarr = array(
CURLOPT_URL => "http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber",
CURLOPT_POST => TRUE,
CURLOPT_POSTFIELDS => urlencode($fields),
CURLOPT_HEADER => TRUE,
CURLOPT_REFERER => "http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber",
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_FOLLOWLOCATION => TRUE
);
curl_setopt_array($curlconf,$curlarr);
$result = curl_exec($curlconf);
echo curl_getinfo($curlconf, CURLINFO_EFFECTIVE_URL);
эхо-сигнал от curl_getinfo возвращает базовый URL-адрес: "http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber"
если вы введете этот базовый URL-адрес в свой браузер, он перенаправит вас на: http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber?execution=e1s1
и первый 1 (e1) увеличивается каждый раз, когда появляется новый сеанс
Комментарии:
1. Что такое
$fields
переменная?2. Это строка объединенных полей
3. Можете ли вы показать его вывод (
var_dump
)?4. строка (93) «tapByTrackSearch:refSearch:refNumbers=42342424amp;tapByTrackSearch:refSearch:ref_submit_button=amp;»
Ответ №1:
Первый URL перенаправляет вас на другой с токеном, переменной, отправляемой сервером (имя переменной: выполнение); предполагается, что вы будете использовать эту переменную для каждого будущего http-запроса. Кажется, что это будет контролироваться каждый раз, возможно, с целью избежать просмотра ботов.
Это первая страница :
#curl http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber
<html><head><title>302 Moved Temporarily</title></head>
<body bgcolor="#FFFFFF">
<p>This document you requested has moved temporarily.</p>
<p>It's now at <a href="http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber?execution=e1s1">http://www.canadapost.ca/cpotools/apps/track/personal/findByRefNumber?execution=e1s1</a>.</p>
</body></html>
Вы использовали CURLOPT_FOLLOWLOCATION, это нормально, но вам также необходимо сохранить файл cookie (CURLOPT_COOKIEJAR ) и использовать его для следующего http-запроса (с CURLOPT_COOKIE )
На самом деле, больше не используйте CURLOPT_FOLLOWLOCATION . Вы не хотите потерять свой файл cookie в пути. Вы можете проанализировать первую страницу, получить «execution = xxxx», а затем использовать cookie для дальнейшего использования.
Редактировать: иногда просмотра curl можно просто избежать, используя любезно предоставленный API.
Комментарии:
1. да, я просматривал файлы cookie, я не мог найти, какой файл cookie они использовали, и даже если бы я его нашел, я не был уверен, как использовать файл cookie, не могли бы вы привести пример?
2. Вы можете сохранить файл cookie в своей файловой системе и использовать его: curl_setopt($curlconf, CURLOPT_COOKIEJAR, ‘/tmp/cookie.txt ‘);
3. Мы можем найти все значения файлов cookie в Chrome / Инструменты разработчика / Ресурсы / Файлы cookie
4. Это может быть неуместно, но вы проверили этот API? Надеюсь, это сработает как для отслеживания бизнеса, так и для персонала canadapost.ca/cpo/mc/business/productsservices/developers /…
5. Работает ли ссылка как для бизнеса, так и для частных лиц? если да, пожалуйста, примите, если ответ был полезен, спасибо. Если нет, давайте продолжим работу с файлами cookie