我正在尝试登录kiala网站。 Kiala是一个“运输”公司,我想用php获得一个新的运输代币。由于没有这样做的api,我试着卷曲。现在我对卷曲没有多少经验,我无法卷曲将饼干保存到罐子里。我已经尝试了很多东西,但现在我已经到了想要撕掉我的头发的地步。我需要这些cookie来提出进一步的请求。
我为测试做了一个虚拟帐户
网站: http://www.kialaverzendservice.be/
登录表单 http://www.kialaverzendservice.be/login.required.action?os_destination=%2Fsender%2Fstart.action
电子邮件: kialatest@mailinator.com
pwd: test123
我得到以下标题
HTTP/1.1 200 OK Date: Thu, 10 Oct 2013 09:46:37 GMT Server:
Apache-Coyote/1.1 Content-Type: text/html;charset=ISO-8859-15 Vary:
Accept-Encoding Set-Cookie:
berkano-seraph-login=eGV5ZcKEZXhlwoZlwoJkfGJ5Y31jemTCgGJ7YsKGYsKCYnhifmLCgmLChmN6YsKGY3dmwoNiwoZjwoNjeGh+YnhjfWJ5Yn1mwoFmwoFm;
Expires=Fri, 10-Oct-2014 09:46:37 GMT; Path=/ Set-Cookie:
kiala-c2c-language=nl; Expires=Tue, 28-Oct-2081 13:00:44 GMT; Path=/
Transfer-Encoding: chunked
我简化的PHP代码:我可以登录,但标题中的cookie没有设置在我的cookiejar文件中?顺便说一句我在localhost(wamp),但我觉得这不重要。
loginToKiala();
function loginToKiala(){
$url = 'http://kialaverzendservice.be/sender/start.action';
//POST vars
$fields = array(
'os_username' => urlencode('kialatest@mailinator.com'),
'os_password' => urlencode('test123'),
'os_cookie'=>urlencode('true')//remember me
);
//url-ify the data for the POST
$fields_string='';
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');
$ch=curl_init();
$cookie_file = './cookies.txt';
if (! file_exists($cookie_file) || ! is_writable($cookie_file))
{
echo 'Cookie file missing or not writable.';
exit;
}
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
//curl_setopt($ch,CURLOPT_AUTOREFERER, true);
//curl_setopt($ch, CURLOPT_REFERER, 'http://www.kialaverzendservice.be/');//set referer for first request
//curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1");
curl_setopt($ch, CURLOPT_HEADER, 1);
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_exec ($ch); // execute the curl command
curl_close ($ch);
unset($ch);
}
任何帮助表示赞赏!
答案 0 :(得分:0)
首先,您没有正确使用CURLOPT_POST
。 cURL期待TRUE
,FALSE
,1
或0
。你在那里的功能count($fields)
将(可能)返回一个高于一的数字。
请改为:
curl_setopt( $ch, CURLOPT_POST, 1 );
至少,如果我理解你想要使用POST而不是GET。