PHP:cURL:在同一网站上运行多个查询

时间:2012-12-07 12:10:00

标签: php curl

我在弄清楚如何运行多个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进行更深入的解释,那也值得赞赏。

2 个答案:

答案 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_COOKIEJARCURLOPT_COOKIEFILE以进行Cookie处理。在同一个curl资源上执行第二个请求,在完成所有请求后运行curl_close($curl)。 Curl保存了请求之间的大部分设置,因此不必担心。

我还建议添加用户代理和引用设置,以使您的请求看起来更自然。