如何在PHP中POST后获取返回的cookie?

时间:2010-07-20 22:16:34

标签: php http-headers

假设我有一个名为(example.com)的网站,它将有一个php文件(example.com/call.php)。 call.php将有一个post方法,将使用正确的参数发布到网站exampleOne.com/login.php。 exampleOne.com将返回带有cookie的标头,该标签将确认用户的身份验证,如何获取cookie或至少检查标头是否包含Set-Cookie以便被告知用户已通过身份验证?

如果不够清楚,请在评论中告诉我,我会尽力清理所有内容。

更新1 :所以我的想法是,我怎么知道我发布的其他域已经设置了cookie,因为已经设置了cookie的事实(Set- cookie!= null或“”)表示用户名和密码实际上是正确的)

更新2 所以我的问题是我想确保该用户是某个论坛的成员,该论坛没有API,我无法对该论坛进行身份验证,因为我没有然而,访问他们的记录,该论坛验证用户并设置一个cookie,如果信息是正确的,我希望能够看到该cookie,以确保我了解用户已通过身份验证 - 希望这有帮助)

1 个答案:

答案 0 :(得分:3)

您可以使用此代码执行您想要的操作。当你通过向页面写入HTTP请求然后处理它发回的响应头时,你只是模拟客户端。这也是您构建代理服务器的方式,但这正是您正在做的事情。

如果您需要帮助,请告诉我。

//
// OPEN SOCKET TO SERVER
//

$_socket = @fsockopen($host, $port, $err_no, $err_str, 30);

//
// SET REQUEST HEADERS
//

$_request_headers  = '... CONSTRUCT FULL HEADERS HERE ...'; 

fwrite($_socket, $_request_headers);

//
// PROCESS RESPONSE HEADERS
//

$_response_headers = $_response_keys = array();
$line = fgets($_socket, 8192);

while (strspn($line, "\r\n") !== strlen($line))
{
    @list($name, $value) = explode(':', $line, 2);
    $name = trim($name);
    $_response_headers[strtolower($name)][] = trim($value);
    $_response_keys[strtolower($name)] = $name;
    $line = fgets($_socket, 8192);
}

sscanf(current($_response_keys), '%s %s', $_http_version, $_response_code);

if (isset($_response_headers['set-cookie']))
{
    // DO WHAT YOU WANT HERE
}

作为参考,您可以在PHProxy中找到更详细的类似代码。它将为您创建标头,处理响应标头等。如果您发现此示例并未执行您需要的所有操作,则应引用该软件。