PHP的curl扩展返回空字符串的问题分析(返回302 found)

分享于:2019-05-14 15:46:23

用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选项。