我在弄清楚如何运行多个cURL请求时遇到了一些困难,而且我并不完全确定我做错了什么。可能是我通过webform登录的代码我写的不正确,但很难自己测试,因为我需要先运行第一个查询才能做到。
这是我第一次查询的代码;
$handle = curl_init();
$login_user = 'user';
$login_pass = 'pass';
$username = 'username';
$password = 'password';
$postdata = "username=".$username."&password=".$password;
curl_setopt($handle, CURLOPT_URL, 'http://somewebsiteexample.php');
curl_setopt($handle, CURLOPT_USERPWD, $login_user . ":" . $login_pass );
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($handle);
curl_close($handle);
echo '<pre>';
print_r($response);
?>
让我超越了基本的http身份验证。现在我需要能够通过将请求发布到webform php页面来登录该站点。
我已经看到了很多关于如何做到这一点的例子,但仅限于他们自己,而不是作为第二个cURL请求。
我拥有能够执行每个请求所需的所有信息,但我不确定如何将这两个请求组合在一起。我是否在同一个cURL会话中进行此操作?
我觉得我确实需要进行单独的curl初始化请求,并且我需要使用CURLOPT_COOKIEJAR通过cookie存储第一个请求的登录信息。 (或者我可以在同一个curl_init()中运行我的第二个查询吗?)
如果是这种情况,我如何存储基本的http身份验证请求,以便在我下次初始化curl时,我已经登录到我可以POST到webform的网站?一旦我知道如何做多个cURL请求,我就可以弄明白其余的。
我对cURL很新(我在很多时候仍然使用file_get_contents()用于网页),所以我也不确定哪些cURL选项对于通过webform登录是绝对必要的。有些似乎很明显,而有些则没有。这是我自己可以解决的问题,但是很难找到一个可靠的cURL登录教程,其中详细说明了每个CURLOPT常量在特定上下文中的作用。
php.net手册有很多信息,虽然它确实告诉你各种cURL选项的相关内容,但它没有提供具体用法的具体例子。如果有另一个资源网站我可以对cURL进行更深入的解释,那也值得赞赏。
答案 0 :(得分:2)
登录通过cookie处理(假设他们不通过URL参数处理)。您需要做的是将响应中收到的cookie存储在登录查询中,并在每次请求时发回cookie。如果您使用CURLOPT_COOKIEJAR
存储收到的Cookie,并且CURLOPT_COOKIEFILE
加载 Cookie,则cURL可以为您自动执行此操作。只需将两个选项都设置为同一个文件即可。
答案 1 :(得分:2)
您需要研究调整curl的方法。 Curl自然不会跟踪任何内容,您需要在请求后调用curl_error($curl)
和curl_errno($curl)
,但在使用curl_close($curl)
关闭资源之前。
您还需要跟踪curl_getinfo($curl)
以获取有关请求和响应的详细信息。确保您的空白页不是由脚本中的语法错误引起的。
下一部分。添加CURLOPT_COOKIEJAR
和CURLOPT_COOKIEFILE
以进行Cookie处理。在同一个curl资源上执行第二个请求,在完成所有请求后运行curl_close($curl)
。 Curl保存了请求之间的大部分设置,因此不必担心。
我还建议添加用户代理和引用设置,以使您的请求看起来更自然。