#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 и т. Д. — И ответ, который вы должны получить.
Надеюсь, это поможет!