Форма PHP curl без действий и событий js

#javascript #php #forms #curl

#javascript #php #формы #curl

Вопрос:

Я пытаюсь использовать curl для публикации некоторых данных и извлечения их с веб-сайта, который не является моим, форма websites, похоже, не имеет действия form, и страница не перезагружается при отправке данных, и, похоже, за нажатием кнопки также есть какой-то js.

 $url = "http://emonitoring.poczta-polska.pl/#";

$parm = "numer=RR123456789PL";
  

и вот curl:

 array(
  CURLOPT_URL   =>  $url,     
  CURLOPT_POST  =>  TRUE,
  CURLOPT_POSTFIELDS     => $parm,
  CURLOPT_RETURNTRANSFER => TRUE,
  CURLOPT_FOLLOWLOCATION => TRUE
);
  

Я выполняю и инициализирую curl, как и ожидалось, просто показывая важные части. Здесь также выводятся заголовки http в реальном времени:

     POST /wssClient.php HTTP/1.1
Host: emonitoring.poczta-polska.pl
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Content-Type: application/x-www-form-urlencoded
Origin: http://kody.poczta-polska.pl
Referer: http://kody.poczta-polska.pl/
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36

HTTP/1.1 200 OK
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Content-Length: 1215
Content-Type: text/html; charset=UTF-8
Date: Mon, 30 Jun 2014 03:31:59 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Server: Apache
X-Cnection: close
  

На данный момент он просто показывает страницу, и не похоже, что эта форма была отправлена, я также попытался ввести URL-адрес следующим образом: «http://emonitoring.poczta-polska.pl/wssClient.php » и просто попросите ввести номер.

Комментарии:

1. если за нажатием кнопки отправки стоит js, это, вероятно, означает, что форма отправлена через ajax. В этом случае вам нужно отправить на эту страницу вместо этого.

Ответ №1:

В таких случаях вы заходите в chrome, нажимаете F12, переходите в сеть, отправляете форму и смотрите, что отправляется на сервер. Я вижу, что это опубликовано

 s:fggsbnqu033gqiipemr50fer56
n:RR123456789PL
l:
  

Если вы просматриваете исходный код, вы видите

 if (jQuery('#numer').val().length == 19) {
  var numer = dodajck(jQuery('#numer').val())
} else var numer = jQuery('#numer').val();


jQuery.ajax({
  type: 'post',
  cache: true,
  dataType: 'html',
  data: ({
    s: 'fggsbnqu033gqiipemr50fer56',
    n: numer,
    l: ''
}),
url: 'wssClient.php',
  

Это s:.... может означать, что вам нужно провести сеанс на их сервере, чтобы иметь возможность вызывать wssClient — если это так, вам нужно будет выполнить CURL с сеансами

Если вы можете вызвать их сервер без сеанса или у вас есть сеанс перед вызовом, вы можете выполнить curl, используя parm is n =, а не numer =, и вам нужно вычислить контрольную сумму, используя их функцию, которую можно легко перевести на PHP

 function dodajck(numer) {
    // dodatkowe sprawdzenia i określenie wag oraz części numeru, która
    // ma zostać zważona
    //String wagi;
    //String doWazenia;

    var wagi = "3131313131313131313";
    var doWazenia = String(numer);
    // wyliczenie sumy iloczynów waga * cyfra
    var suma = 0;
    for (var i = 0; i < 19; i  )
    suma = suma   Number(doWazenia.substring(i, i   1)) * Number(wagi.substring(i, i   1));
    // ostateczne sprawdzenia


    // przykład numeru 20-cyfrowego
    // 00
    // 1 - rodzaj?
    // 590 -- kraj 590 = PL
    // 0773 -- firma 0773 = PP
    // 3 -- rodzaj przesyłki
    // 12345678 - numer przesyłki
    // 9 - CK
    // ważone są numery od 1 do 19
    var ck = 10 - suma % 10;
    if (ck == 10) ck = 0;

    return String(numer)   String(ck);
}
  

Комментарии:

1. поскольку он был отправлен с помощью ajax, могу ли я по-прежнему публиковать его с помощью curl? или мне нужно что-то еще

2. См. Обновление. Если вы вычисляете контрольную сумму и не нуждаетесь в сеансе, тогда вы можете curl

3. Я нашел контрольную сумму из функции dodajck, поэтому теперь я должен использовать ‘n = * контрольная сумма *’ при переходе к CURLOPT_POSTFIELDS?

4. Нет. «n =».контрольная сумма ($ num); где контрольная сумма — это ваша версия php для них, но, по-видимому, только тогда, когда ваш номер имеет длину 19

5. хорошо, понял. Я обнаружил, что файл cookie, который обрабатывает идентификатор сеанса, является ‘PHPSESSID’ как мне нужно справиться с этим с помощью curl?

Ответ №2:

Форма отправляется через AJAX. Чтобы увидеть точный HTTP-запрос, просто запустите инструменты разработчика в Chrome или Firefox (F12). Перейдите на вкладку «Сеть» и нажмите кнопку отправки на их веб-сайте. Вы должны увидеть, что запрос выполняется. Если вы откроете его, вы сможете увидеть все, что вам нужно, чтобы сделать запрос самостоятельно — URL, параметры и их формат, значения заголовка HTTP и т. Д. — И ответ, который вы должны получить.

Надеюсь, это поможет!