php curl не соответствует местоположению

#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