使用curl被返回400怎么破解

2025-04-28 21:47:29
推荐回答(1个)
回答1:

之前一直没有细心关注过curl,用的时候也是直接调取封装好的方法,

做微信公共账号和其他api接口的时候也没有遇到400 Bad Request错误

今天就奇了个怪了,一直报 400 Bad Request 

网上找了以下解决方法:

1. url地址有误.
  手动在地址栏里输入url看看请求是否正常.
  注意: 如果url地址里面包含换行符也有可能返回400.
2. https请求需要设置对应参数
  ## Below two option will enable the HTTPS option.
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  FALSE);
3. url中传递的字符串需要url_encode转码

但我试了都不起作用,依旧:

郁闷中 将method改为大写,刷新后一切ok!

?

 /**

     *   curl请求

     * @param array $data   要请求的array数组

     * @param str $url      请求的地址

     * @param str $method   大写 POST   GET

     * @return array     

     */

    static public function curl($data, $url, $method = 'POST') {

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);

        //$method 方法

        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, strtoupper($method));   

        //启用时会将服务器服务器返回的"Location:"放在header中递归的返回给服务器

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  

          //自动设置header中的referer信息

        curl_setopt($ch, CURLOPT_AUTOREFERER, 1); 

         //在HTTP中的"POST"操作数据

        curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

        // 设置超时限制防止死循环

        curl_setopt($ch, CURLOPT_TIMEOUT, 10);

        //在curl_exec()获取的信息以文件流的形式返回,而不是直接输出

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

        $tmpInfo = curl_exec($ch);

        if (curl_errno($ch)) {

            return curl_error($ch);

        }

        curl_close($ch);

        return $tmpInfo;

    }