PHP curl携带cookie请求访问第三方接口

	在PHP curl请求三方接口的时候 登陆接口后 发现怎么请求都环保取不到数据 后来经过查询 发现没有携带本网站的cookie,解决方法如下 
	首先是三方接口类  

   
    public function __construct($name = "", $password = "",$url="")
    {
        if (!empty($name)) {
            $this->name = $name;
        }
        if (!empty($password)) {
            $this->password = $password;
        }
        if (!empty($url)) {
            $this->Url = $url;
        }
    }

    /**
     * 登录获取当前cookie
     * @return bool|string
     */
    function login()
    {

        $url = $this->Url. $this->name . '&password=' . $this->password . '&loginType=Ajax';
        $ch = curl_init();
        //定义/tmp.cookie 路径 在public/uplodes/下
        $cookie_file =  '.'.DS.'uploads'. DS ."/tmp.cookie";

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //获取cookie 放入到文件中  
        curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }

获取到了之后 会在 uplodes下面生成一个![在这里插入

然后 下次使用 curl的时候

 $cookie_file = '.'.DS.'uploads'. DS ."/tmp.cookie";
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);

就可以获取到数据了

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: PHP Curl可以通过设置Cookie来发送POST请求。设置Cookie可以使用curl_setopt函数中的 CURLOPT_COOKIE选项。具体的实现如下: ``` //初始化curl $ch = curl_init(); //设置url curl_setopt($ch, CURLOPT_URL, "http://example.com/post"); //设置POST请求 curl_setopt($ch, CURLOPT_POST, 1); //设置POST参数 $post_data = array( "name" => "foo", "age" => 20 ); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); //设置Cookie $cookie = "PHPSESSID=1234567890abcdef"; curl_setopt($ch, CURLOPT_COOKIE, $cookie); //执行curl $result = curl_exec($ch); //关闭curl curl_close($ch); echo $result; ``` 上面的代码中,设置了url和POST参数,并使用curl_setopt函数设置了Cookie,即在请求时附带了Cookie信息,从而实现了发送带Cookie的POST请求。 ### 回答2: PHP是一种无状态的编程语言,因此要在不同的页面之间共享信息,业界普遍采用cookie来实现。在使用PHPCURL模块向服务器提交POST请求时也需要使用cookie。下面我们来介绍如何使用PHP CURL POST cookie请求。 首先,我们需要明确一点,就是使用cookie实现POST请求时需要先获取cookie,然后再将cookie携带在POST请求中一并提交,否则服务器无法验证请求的合法性。 获取cookie 假设需要POST请求的页面是http://www.example.com/login.php,我们使用如下代码获取cookie: ``` $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://www.example.com/login.php'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, true); $data = curl_exec($curl); curl_close($curl); $cookie_start = strpos($data, 'PHPSESSID=') + 10; $cookie_end = strpos($data, ';', $cookie_start); $cookie = substr($data, $cookie_start, $cookie_end - $cookie_start); ``` 上面的代码使用了CURLCURLOPT_HEADER选项来获取服务器返回的HTTP头信息,然后从头信息中提取出cookie值。上面的代码还使用了CURLOPT_RETURNTRANSFER选项来将返回的结果作为字符串返回,而不是直接输出。这个过程可以根据实际情况进行调整。 提交POST请求 接下来,我们使用如下代码提交POST请求,并携带上面获取的cookie: ``` $post_data = array( 'username' => 'admin', 'password' => 'password', ); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://www.example.com/login.php'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_COOKIE, 'PHPSESSID=' . $cookie); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post_data)); $result = curl_exec($curl); curl_close($curl); ``` 上面的代码首先创建了一个POST请求,然后使用CURLOPT_COOKIE选项将cookie携带请求中。这样,服务器就可以通过cookie验证请求的合法性了。最后,使用CURLOPT_POSTFIELDS选项将POST数据提交到服务器。上面的代码还使用了http_build_query函数将POST数据编码成URL格式。 总结 使用PHPCURL模块实现POST请求时,需要注意使用cookie验证请求的合法性。具体实现上,需要先获取cookie,然后将cookie携带在POST请求中一并提交。这样,服务器就可以正确地验证请求的合法性,从而完成POST请求的操作。 ### 回答3: PHP通过CURL来发送HTTP请求,实现POST请求携带cookie可以使用如下代码: ``` // 创建CURL $ch = curl_init(); // 设置请求URL curl_setopt($ch, CURLOPT_URL, 'http://example.com/api/login'); // 设置请求类型为POST curl_setopt($ch, CURLOPT_POST, true); // 设置POST参数 curl_setopt($ch, CURLOPT_POSTFIELDS, 'username=username&password=password'); // 设置cookie curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/cookie'); curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/cookie'); // 执行请求 $result = curl_exec($ch); // 关闭CURL curl_close($ch); ``` 其中, `CURLOPT_COOKIEJAR`选项用来保存cookie, `CURLOPT_COOKIEFILE`选项用来读取cookie访问后续页面时,需要使用 `CURLOPT_COOKIEFILE`来携带cookie。 需要注意的是,在以上代码中,POST请求数据以字符串形式传递,需要使用 `urlencode()` 对参数进行编码。另外,cookie文件`/tmp/cookie`需要存在,如果不存在会自动创建。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值