我正在尝试使用curl发布一些数据并从不是我的网站检索它,网站表单似乎没有表单操作,并且当您提交数据时页面不会重新加载点击按钮后似乎还有一些js。
$url = "http://emonitoring.poczta-polska.pl/#";
$parm = "numer=RR123456789PL";
这是卷曲:
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
目前它只是显示页面而且看起来不像是提交了表单,我还尝试将网址设置为:“http://emonitoring.poczta-polska.pl/wssClient.php”,然后告诉他输入数字。
答案 0 :(得分:2)
在这种情况下,您转到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 with sessions
如果您可以在没有会话的情况下呼叫他们的服务器,或者在您打电话之前有一个会话,您可以使用parm卷曲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 :(得分:1)
表格通过AJAX提交。要查看确切的HTTP请求,只需启动Chrome或Firefox中的开发人员工具(F12)即可。导航到“网络”标签,然后点击其网站上的提交按钮。你应该看到一个被解雇的请求。如果你打开它,你将能够看到自己提出请求所需的一切 - URL,参数及其格式,HTTP标题值等 - 以及你应该得到的响应。
希望这有帮助!