如何防止PHP发送的HTTP请求中的403错误?

时间:2012-03-04 21:08:12

标签: php http curl fopen

我使用以下脚本将数据发布到外部网站。在下面的示例中,用户已经收集了$ method,$ url和$ postdata。

foreach($postdata as $key => $value) 
{ 
    $data .= $key . '=' . $value . '&';
}

if ($method == 'POST') {

    // Set headers
    $headers = array('http' => array(
            'method' => $method,
            'header' => "accept-language: en\r\n" . 
            "Host: $host\r\n" .
            "Referer: $url\r\n" .
            "Content-Type: application/x-www-form-urlencoded\r\n",
            'content' => $data));

    // Send request and retreive response
    $context = stream_context_create($headers);
    $fp = fopen($url, 'rb', false, $context);
    fpassthru($fp);
    fclose($fp);

} else if ($method == 'GET') {

    // Set headers
    $headers = array('http' => array(
            'method' => $method,
            'header' => "accept-language: en\r\n" . 
            "Host: $host\r\n" .
            "Referer: $url\r\n" .
            "Content-Type: application/x-www-form-urlencoded\r\n"));

    // Append url
    $url .= '?' . $data;

    // Send request and retreive response
    $context = stream_context_create($headers);
    $fp = fopen($url, 'rb', false, $context);
    fpassthru($fp);
    fclose($fp);

} else {
    echo 'Invalid method.';
}

在大多数情况下它工作正常,但有些网站会发回403 Forbidden,表面上是因为他们不喜欢fopen()请求。有没有解决的办法?如果我使用cURL而不会阻止403?而且,如果是这样,cURL的做法是什么?感谢。

1 个答案:

答案 0 :(得分:1)

您可能希望确保将USER-AGENT与标题一起传递。我曾经处理过需要我们登录远程系统以便我们可以提取数据的项目,但是在其中一些系统中,如果我们没有通过有效的用户代理,我们就无法获得访问权限,即使登录凭据是设置正确。