用PHPcurl请求一个URL,在确保URL完全无误的情况下,curl_exec返回的是空字符串。为什么会是这样的情况呢?到底发生了什么问题,我们开始排查:
curl_setopt( $curl, CURLOPT_HEADER, 1 );
开启CURLOPT_HEADER选项(启用时会将头文件的信息作为数据流输出),查看下返回的文件头信息。假如返回的类似于这样:
HTTP/1.1 302 Found Server: nginx Date: Tue, 14 May 2019 06:52:01 GMT Content-Length: 0 Connection: keep-alive Set-Cookie: JSESSIONID=268E41FE46CF012A42649305D6C26D0B; Path=/balanceService/; Secure; HttpOnly Location: /balanceService/infomanage/getYiBuMessage;*********** Content-Language: en-US
这说明什么:请求的URL跳转到新的URL了,即HTTP中的3XX(redirection,重定向 ),此时如果不设置自动跳转倒新url的话,可能会出现问题。比如curl请求的是空字符串。解决方法为:
curl_setopt( $curl, CURLOPT_FOLLOWLOCATION,1); //是否抓取跳转后的页面
开启CURLOPT_FOLLOWLOCATION选项。