首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cURL登录到jsp网站并返回HTML

cURL登录到jsp网站并返回HTML
EN

Stack Overflow用户
提问于 2012-03-05 23:01:24
回答 1查看 5.4K关注 0票数 0

我试图使用cURL登录jsp/tomcat网站(出于隐私原因,我们将其命名为https://unknown.com )并从页面中返回HTML。我在firebug中观察到了Net面板,以及使用Firecookie的cookie面板来概述手册,步骤如下:

  1. 开放网络根目录- https://unknown.com
  2. 重定向到创建的https://unknown.com/common/frames.jsp -Cookie : JSESSIONID
  3. 填写j_username和j_password
  4. 将"j_username=user&j_password=pass&submit=logon“发布到检查
  5. 重定向到https://unknown.com/common/frames.jsp
  6. 用户从主页选择要返回HTML的链接。

因此,基本上我对cURL没有太多的经验,也没有多少运气,我只需要首先了解cURL登录到站点并进入目标页面所需的步骤。

编辑:这是我的代码:

代码语言:javascript
复制
//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不改变的问题,或者它会根据需要而改变吗?

EN

回答 1

Stack Overflow用户

发布于 2012-03-06 00:26:01

以下是一些关于你处境的建议..。

  • -为简单起见重用相同的卷发句柄() 这减少了对每个请求重复选项的需要。在开始时设置大多数选项,并且只做一次。我主要指的是曲奇选项,用户代理,跟踪位置等. 然后,您可以为每个单独的请求设置URL和request方法。 您甚至可以通过向请求中添加一个Keep-Alive头来获得额外的性能,因此如果远程服务器支持它,则将使用相同的连接来发出多个请求,而不必每次重新连接。
  • true 设置为true,并从开始 试着按照你看到的浏览器所做的来做。也就是说,请求web根目录;如果站点重定向到安全检查URL,cURL将遵循重定向并捕获进程中设置的任何cookie。如果发送重定向,一个cURL请求可能导致多个HTTP请求。然后继续“填写”登录表单。
  • 使用 http 作为post数据 设置post字符串的方式没有什么问题,但是数据必须是url编码的。与数组一起使用http_build_query()更容易操作,并将产生一个url编码的字符串,您可以直接将其输入到cURL。

参见这个答案,几天前,我为一个试图做类似事情的人发了帖子。我还发布了一些其他答案的引用,其中包含了使用cURL请求多个URL的完整示例;只要查看这些答案,就可以帮助您了解如何做您想做的事情。尤其请参阅这个答案,它是我提到的文章中的第一个参考,它展示了如何通过发出几个post请求和最后一个get请求登录到谷歌。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9575419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档