如何将PHP cURL连接拆分为文件?

如何将PHP cURL连接拆分为文件?,php,curl,Php,Curl,我构建了一个简单的PHP脚本来登录到一个网页,并在第二个页面上接收一些数据。现在,我使用一个php文件和两个使用相同cookie的单独curl连接。第一个curl连接进行登录,第二个接收数据 现在,我想将这两个部分拆分为两个单独的php文件,通过Ajax调用每个独立的php文件 登录成功,但检索数据无效,这似乎是由于缺少cookie 我不太确定这样做是否可行,最好的做法是什么来实现我的目标,也许有人能让我的想法变得光明 //设置常量 定义('COOKIE_NAME','c.txt'); 定义('

我构建了一个简单的PHP脚本来登录到一个网页,并在第二个页面上接收一些数据。现在,我使用一个php文件和两个使用相同cookie的单独curl连接。第一个curl连接进行登录,第二个接收数据

现在,我想将这两个部分拆分为两个单独的php文件,通过Ajax调用每个独立的php文件

登录成功,但检索数据无效,这似乎是由于缺少cookie

我不太确定这样做是否可行,最好的做法是什么来实现我的目标,也许有人能让我的想法变得光明

//设置常量
定义('COOKIE_NAME','c.txt');
定义('url\u login','https://website.com/login.cgi');
$postString='user='.$user.&passwd='.$passwd.&otp='.$otp;
//创建用于登录的连接
$curl\u connection=curl\u init(url\u登录);
curl_setopt($curl_连接,CURLOPT_连接超时,30);
curl_setopt($curl_连接,CURLOPT_用户代理,
“Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.1)”;
curl_setopt($curl_connection,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl_连接,CURLOPT_SSL_验证对等,false);
curl_setopt($curl_连接,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($curl_连接,CURLOPT_头,false);
curl_setopt($curl_连接,CURLOPT_COOKIEJAR,COOKIE_名称);
curl\u setopt($curl\u连接、CURLOPT\u COOKIEFILE、COOKIE\u名称);
curl_setopt($curl_connection,CURLOPT_POSTFIELDS,$postString);
$loginpage=curl\u exec($curl\u connection);
//创建CURL连接以获取数据
$data\u url='1https://website.com/getData.cgi';
$curl\u connection=curl\u init($data\u url);
curl_setopt($curl_连接,CURLOPT_连接超时,30);
curl_setopt($curl_连接,CURLOPT_用户代理,
“Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.1)”;
curl_setopt($curl_connection,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl_连接,CURLOPT_SSL_验证对等,false);
curl_setopt($curl_连接,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($curl_连接,CURLOPT_头,false);
curl_setopt($curl_连接,CURLOPT_COOKIEJAR,COOKIE_名称);
curl\u setopt($curl\u连接、CURLOPT\u COOKIEFILE、COOKIE\u名称);
$data=curl\u exec($curl\u connection);
这就是它的工作原理

一旦我将curl连接拆分为单独的php文件,第二部分就无法提供以下输出:

HTTP/1.1 200 OK Server:nginx日期:Fri,2020年3月20日12:49:12 GMT内容类型:文本/html内容长度:85连接:关闭缓存控制:无缓存,无存储,必须重新验证Pragma:无缓存过期:0设置Cookie:ws-sid-10-147-g1e32=已删除;路径=/;最大年龄=0严格的运输安全:最大年龄=63072000;包括子域;预加载X-Frame-Options:DENY X-Content-Type-Options:nosniff X-XSS-Protection:1;模式=块未找到cookie


我想我找到了解决办法,至少它起作用了

在第一个cURL连接中,我从头部读取Cookie,在第二个连接中,我使用CURLOPT_Cookie选项手动添加Cookie:

第一个PHP文件和cUrl连接:

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($curl_connection, CURLOPT_HEADER, true);
curl_setopt($curl_connection, CURLOPT_COOKIEJAR, COOKIE_NAME);
curl_setopt($curl_connection, CURLOPT_COOKIEFILE, COOKIE_NAME);

curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $postString);
$page = curl_exec($curl_connection);

preg_match("/Set-Cookie: (.{18,20})\=(.{32});/", $page, $cookie);

$cookie = $cookie[2];
$curl_connection = curl_init($url);

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($curl_connection, CURLOPT_HEADER, true);

curl_setopt($curl_connection, CURLOPT_COOKIE, $cookie);
在第二个文件和卷曲连接中:

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($curl_connection, CURLOPT_HEADER, true);
curl_setopt($curl_connection, CURLOPT_COOKIEJAR, COOKIE_NAME);
curl_setopt($curl_connection, CURLOPT_COOKIEFILE, COOKIE_NAME);

curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $postString);
$page = curl_exec($curl_connection);

preg_match("/Set-Cookie: (.{18,20})\=(.{32});/", $page, $cookie);

$cookie = $cookie[2];
$curl_connection = curl_init($url);

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($curl_connection, CURLOPT_HEADER, true);

curl_setopt($curl_connection, CURLOPT_COOKIE, $cookie);

我想我找到了解决办法,至少它起作用了

在第一个cURL连接中,我从头部读取Cookie,在第二个连接中,我使用CURLOPT_Cookie选项手动添加Cookie:

第一个PHP文件和cUrl连接:

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($curl_connection, CURLOPT_HEADER, true);
curl_setopt($curl_connection, CURLOPT_COOKIEJAR, COOKIE_NAME);
curl_setopt($curl_connection, CURLOPT_COOKIEFILE, COOKIE_NAME);

curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $postString);
$page = curl_exec($curl_connection);

preg_match("/Set-Cookie: (.{18,20})\=(.{32});/", $page, $cookie);

$cookie = $cookie[2];
$curl_connection = curl_init($url);

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($curl_connection, CURLOPT_HEADER, true);

curl_setopt($curl_connection, CURLOPT_COOKIE, $cookie);
在第二个文件和卷曲连接中:

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($curl_connection, CURLOPT_HEADER, true);
curl_setopt($curl_connection, CURLOPT_COOKIEJAR, COOKIE_NAME);
curl_setopt($curl_connection, CURLOPT_COOKIEFILE, COOKIE_NAME);

curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $postString);
$page = curl_exec($curl_connection);

preg_match("/Set-Cookie: (.{18,20})\=(.{32});/", $page, $cookie);

$cookie = $cookie[2];
$curl_connection = curl_init($url);

curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($curl_connection, CURLOPT_HEADER, true);

curl_setopt($curl_connection, CURLOPT_COOKIE, $cookie);

请添加您的代码并解释您所做的一切。请解释您的代码如何“不起作用”。您是否收到特定的错误消息?代码是否在不拆分文件的情况下退出?它会合并文件吗?编辑了这篇文章,希望它现在清楚了。请添加你的代码并解释你做了什么。请解释你的代码“不工作”。您是否收到特定的错误消息?代码是否在不拆分文件的情况下退出?它会合并文件吗?编辑了这篇文章,希望现在可以清除