我们有一个内网网站,我们使用它通过用户 ID 查询信息,这里是网站 cookie 的示例。
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.
192.168.202.200 FALSE / FALSE 0 JSESSIONID SX2NVyVkj4YlY2Zv7857Mdyy5RpdfQWmLjYjqtnWTF4x9nRghxcr!1083570229
我使用 web 开发人员将 cookie(和一些 web 元素)从 firefox 复制到 chrome。chrome 可以正常工作。但是当我使用这样的php代码时:
<?php
$cookie = tempnam('.','cookie');
$url='http://192.168.202.200/bbs/query.jsp';
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
$output = curl_exec($ch) ;
$fh = fopen("cookie.html", 'w') ;
fwrite($fh, $output) ;
fclose($fh) ;
curl_close($ch);
preg_match("/<input type=\"hidden\" name=\"myname\" value=\"(.*)\"\/>/isU",$output,$myname);
$url='http://192.168.202.200/bbs/SomeAction.do';
$curlPost='billNum=1049090347503&myname='.$myname[1];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$output = curl_exec($ch) ;
$fh = fopen("out.html", 'w') ;
fwrite($fh, $output) ;
fclose($fh) ;
curl_close($ch);
@unlink($cookie);
?>
我的 php 代码无法进行成功查询,但只有一个网页指示“查询检查机制错误”,这似乎是由 web 自动阻止查询生成的。
'http://192.168.202.200/bbs/query.jsp'
是主页的 iframe,并且'http://192.168.202.200/bbs/SomeAction.do'
有一个执行查询的 iframe。
我将 CURLOPT_HEADER 更改为 1,然后得到这样的标题:
HTTP/1.1 200 OK Cache-Control: no-cache="set-cookie" Date: Fri, 11 Oct 2013 15:10:21 GMT Transfer-Encoding: chunked Content-Type: text/html; charset=GB2312 Set-Cookie: JSESSIONID=SYJd5J2b2C7FN2LPXVQfHk3vp4mmpTlKBtBbLbCT1HGfmX2kXGtR!-860145551; path=/ X-Powered-By: Servlet/2.4 JSP/2.0
显然问题就在这里。Cache-Control:no-cache="set-cookie"
, 如何避免 Reponse header to set-cookie
.
谢谢。