【发布时间】:2016-02-16 17:44:52
【问题描述】:
我正在尝试根据 curl 标头的响应设置会话。然后使用先前的会话集执行新的 curl。但是我好像还是没有登录。
firl cURL 执行如下所示:
$url = "https://www.tyre24.com//nl/nl/user/login/userid/MYUSERID/password/MYPASSWORD/page/L2V4cG9ydC9kb3dubG9hZC90L01nPT0vYy9NVFE9Lw==";
$ch = curl_init(str_replace(" ","%20",$url));
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$response = curl_exec($ch);
// Then, after your curl_exec call:
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
$redirect_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
然后,我使用以下代码从标头响应中检索 PHPSESSID:
$arrResult = explode("PHPSESSID=", $header);
$arrResult = explode(";", $arrResult[1]);
session_id("$arrResult[0]");
session_start();
到目前为止一切正常,当我执行代码时,我得到了变量中 PHPSESSID 的值。
但是当我用底部的 2 行设置会话时,似乎有注释集之类的。至少在会话开始后,我尝试打印所有会话。但它会打印一个空数组。
所以可能是我在这里做错了。
但是在第一个请求之后需要有第二个请求,因为第一个请求的 url 会将我链接到一个新的 URL 以下载文件。
所以第二个请求看起来像这样:
$second_url = "https://www.tyre24.com/nl/nl/export/download/t/Mg==/c/MTQ=/";
$fp = fopen ('result.zip', 'w+');
$ch = curl_init(str_replace(" ","%20",$second_url));
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$response = curl_exec($ch);
// Then, after your curl_exec call:
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
$redirect_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
fclose($fp);
谁能看到我做错了什么? 或者我可以在一个 cURL 调用中完成所有事情吗?
我不断收到我未登录的消息。
【问题讨论】: