PHP cURL

GET/POST

curl_setopt($ch, CURLOPT_POST, 0);

Curl 默认使用 GET 方式获取内容,如果设定成了 POST 而重新要使用 GET 请求,或者上一次请求为 POST,这次请求需要重新使用 GET 请求,需要复写设置:

curl_setopt($ch, CURLOPT_HTTPGET, 1);

cookie

// 必须使用绝对路径,不可以写成 $cookie_jar = 'test.cookie'
$cookie_jar = dirname(__FILE__).DIRECTORY_SEPARATOR.'test.cookie';
// 写入文件
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie_jar);
// 从文件读出
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie_jar);

CURL 已经可以操作 HttpOnly 的 cookie,在 cookie 文件中会以 # 开头记录 HttpOnly 方式的 cookie。

The #Httponly_ prefix on a line is not a comment. It is a magic string to tell the browser/client that the cookie in question is a httponly one. curl will understand that and deal with it accordingly.

curl_getinfo

获取一个cURL连接资源句柄的信息 参见 php.net

HTTP Header

响应信息头

curl_setopt($ch, CURLOPT_HEADER, 1);

这将在请求后的内容里输出

请求信息头

# 必须先在请求前指定
curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
$info = curl_getinfo($ch, CURLINFO_HEADER_OUT);

Debug

HTTP/1.1 500 Internal Server Error

如果出现 500 错误基本是因为 curl 的操纵与浏览器存在差异,出现错误或者受服务端代码控制异常响应,如没有成功执行 Cookie 或者本应是 GET 的页面提交了 POST。

应用

PHP获取Cookie模拟登录CURL