我试图使用cURL登录jsp/tomcat网站(出于隐私原因,我们将其命名为https://unknown.com )并从页面中返回HTML。我在firebug中观察到了Net面板,以及使用Firecookie的cookie面板来概述手册,步骤如下:
因此,基本上我对cURL没有太多的经验,也没有多少运气,我只需要首先了解cURL登录到站点并进入目标页面所需的步骤。
编辑:这是我的代码:
//user login information
$username = "user";
$password = "pass";
$postData = "j_username=".$username."&j_password=".$password."&logon=submit";
$cookie_file = "/tmp/curl_cookies.txt";
//$fp = fopen($cookie_file, "w");
//fclose($fp);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://unknown.com/common/j_security_check');
curl_setopt($ch, CURLOPT_POSTFIELDS,$postData);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3");
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_REFERER, "https://unknown.com/common/Frames.jsp");
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://unknown.com/claritymatch/ClarityBatchViewer.jsp?id=123');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3");
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
echo $data;当我第一次运行.php文件时,它不起作用,但是第二次它会弹出目标HTML --我如何才能让它第一次启动呢?另外,由于我将JSESSIONID存储在上面所示的文件中,我会不会遇到这个会话id不改变的问题,或者它会根据需要而改变吗?
发布于 2012-03-06 00:26:01
以下是一些关于你处境的建议..。
Keep-Alive头来获得额外的性能,因此如果远程服务器支持它,则将使用相同的连接来发出多个请求,而不必每次重新连接。true 设置为true,并从开始
试着按照你看到的浏览器所做的来做。也就是说,请求web根目录;如果站点重定向到安全检查URL,cURL将遵循重定向并捕获进程中设置的任何cookie。如果发送重定向,一个cURL请求可能导致多个HTTP请求。然后继续“填写”登录表单。http_build_query()更容易操作,并将产生一个url编码的字符串,您可以直接将其输入到cURL。参见这个答案,几天前,我为一个试图做类似事情的人发了帖子。我还发布了一些其他答案的引用,其中包含了使用cURL请求多个URL的完整示例;只要查看这些答案,就可以帮助您了解如何做您想做的事情。尤其请参阅这个答案,它是我提到的文章中的第一个参考,它展示了如何通过发出几个post请求和最后一个get请求登录到谷歌。
https://stackoverflow.com/questions/9575419
复制相似问题