0

I'm trying to use curl to post some data and retrieve it from a website that isn't mine, the websites form doesn't seem to have a form action and the page doesn't reload when you submit the data and there also seems to be some js behind the click of the button.

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

$parm = "numer=RR123456789PL";

and here is the curl:

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

I execute and init the curl as expected, just showing the important parts. Here is also the live http headers output:

    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

At the moment it just shows the page and it doesn't look like that form was submitted, I've also tried putting the url as: "http://emonitoring.poczta-polska.pl/wssClient.php" and just get told to enter the number.

1
  • if there's js behind the click of the submit button it probably means that the form is submitted via ajax. In that case, you need to submit to that page instead. Commented Jun 30, 2014 at 3:48

2 Answers 2

2

In such cases you go to chrome, hit F12, go to network, submit the form and see what is sent to the server. I see this posted

s:fggsbnqu033gqiipemr50fer56
n:RR123456789PL
l:

If you view source you see

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',

The s:.... could mean you need to have a session on their server to be able to call the wssClient - if so, you will need to CURL with sessions

If you can call their server without a session or you have a session before you call you can curl using the parm is n= and not numer= and you need to have calculated the checksum using their function which can easily be translated to 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);
}
Sign up to request clarification or add additional context in comments.

6 Comments

since its being submitted with ajax am I still able to post it with curl? or do I need something else
See update. If you calculate the checksum and do not need the session then you you can curl
I found the checksum from the dodajck function, so I now have to use 'n=*checksum*' when passing to the CURLOPT_POSTFIELDS?
No. "n=".checksum($num); where checksum is your php version of theirs - but seemingly only when your number is 19 long
ok got that. I found the cookie that handles the session id is 'PHPSESSID' how would I need to handle this with curl ?
|
1

The form is submitted via AJAX. To see the exact HTTP request simply fire up the developer tools in Chrome or Firefox (F12). Navigate to the 'Network' tab, and hit the submission button on their website. You should see a request being fired off. If you open it up, you will be able to see everything you need to make the request yourself - URL, Parameters and their format, HTTP header values, etc. - and the response you're supposed to get.

Hope this helps!

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.