0

当我从地址栏运行 url 时,如何以与浏览器中相同的方式(完全相同的行为)从 php 脚本运行 url。我的意思是使用浏览器发送的相同标题数据、cookie 和附加数据。如何在 php.ini 中添加此数据。

我登录时需要这个原因,这两种情况的答案不一样:

  1. 在浏览器中我仍然登录,这是正确的
  2. 从 php 运行我退出 - 不正确

我试过 file_get_contents nad curl (从这里)但它不能正常工作 - 响应仍然不同。

我正在打电话http://127.0.0.1/check.html,这是功能检查:

public function check(){
    echo 'begin';
    //      $total_rows = file_get_contents('https://127.0.0.1:8443/example.html?shopId=121');
    $total_rows = $this->getUrl('https://127.0.0.1:8443/example.html', '121');
    print_r($total_rows);
    echo 'end';
}

function getUrl($url, $shopId ='') {
    $post = 'shopId=' . $shopId;

    $ch = curl_init();

    $cookie_string="";
    foreach( $_COOKIE as $key => $value ) {
      $cookie_string .= "$key=$value;";
    };
    $cookie_string .= "JSESSIONIDSSO=66025D1CC9EF39ED7F5DB024B6026C61";

//        echo $cookie_string;;

    $ch = curl_init();
    curl_setopt($ch,CURLOPT_COOKIE, $cookie_string);
    //      curl_setopt($ch, CURLOPT_PORT, 8443);  
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
    //      curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/../../files/cacert.pem");
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);     
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    //        curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Secure Content-Type: text/html; charset=UTF-8")); 
    //        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: 127.0.0.1:8443'));

    $ret = curl_exec($ch);
    curl_error ($ch );
    curl_close($ch);
    return $ret;
}
4

2 回答 2

0

您可以使用 PHP 脚本执行 cron 作业以执行其他脚本。

于 2012-08-27T12:39:05.033 回答
0

试试看: http ://www.lastcraft.com/browser_documentation.php 或者说:http: //sourceforge.net/projects/snoopy/ 或者说: php curl:我怎样才能像网络浏览器一样模拟获取请求? 希望帮助

于 2012-08-27T12:34:29.060 回答