【问题标题】:make a client redirection with CURL使用 CURL 进行客户端重定向
【发布时间】:2011-07-19 13:42:42
【问题描述】:

这就是我想要做的:

  • 使用 POST 变量传递带有 curl 语句的表单 => 好
  • 在我登录网站后,转到我想要的任何页面 => 不好

这是我现在的脚本:

$postData = array(
    'login' => 'john',
    'pwd' => 'doe'
);

$array_url = array('3109');

foreach ($array_url as $k => $i) {
    echo $i."<br>";
    $c = curl_init();

    $url = "http://mywebsite/index.php?ok=1";

    curl_setopt($c, CURLOPT_URL, $url);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($c, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($c, CURLOPT_POSTFIELDS, $postData);

    $output = curl_exec($c);
    if ($output === false) {
        trigger_error('Erreur curl : ' . curl_error($c), E_USER_WARNING);
    }
    else {

        var_dump($output);
        echo $output;
    }
    curl_close($c);
}

我怎样才能做到这一点?

编辑:如果我尝试获取我想咨询的页面,我会重定向到登录表单,因为我无法从该页面设置情侣登录/密码,我需要获取检查密码一个...

谢谢

【问题讨论】:

    标签: php url post curl redirect


    【解决方案1】:

    您需要确定远程页面如何验证会话。大多数网站都使用 cookie 来执行此操作。登录后,任何连续的页面请求都会传递 cookie,远程站点会检查 cookie,如果它有效且未过期,它会让你通过,否则,它会将你踢回登录页面(或给你一个错误,或其他)。

    因此,如果它是 cookie,则需要存储返回的 cookie,并在任何后续 curl 请求中使用它。

    【讨论】:

    • CURLOPT_COOKIEFILE & CURLOPT_COOKIEJAR 选项来处理cookies。
    • @Anthony 好吧,它会检查每个页面的 cookie 中的 phpsessid,所以最后我不需要费心传递登录表单,我只需要检索服务器端(这是我的网站) cookie 值并按照 hakre 给我的指令提供给 curl ?
    • 第一个 curl 请求传入凭据并传回 cookie。使用 hakre 提到的选项,每个后续 curl 请求都应该只需要 cookie。
    【解决方案2】:

    尝试使用 Zend_Http_Client - 它是 Zend 框架的一部分。它可以存储 cookie 并在每次下一个请求时重新发送它们。这是来自documentation 的示例:

    // To turn cookie stickiness on, set a Cookie Jar
    $client->setCookieJar();
    
    // First request: log in and start a session
    $client->setUri('http://example.com/login.php');
    $client->setParameterPost('user', 'h4x0r');
    $client->setParameterPost('password', '1337');
    $client->request('POST');
    
    // The Cookie Jar automatically stores the cookies set
    // in the response, like a session ID cookie.
    
    // Now we can send our next request - the stored cookies
    // will be automatically sent.
    $client->setUri('http://example.com/read_member_news.php');
    $client->request('GET');
    

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 2019-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多