Как предотвратить 403 ошибки в HTTP-запросах, отправляемых PHP? - PullRequest
1 голос
/ 05 марта 2012

Я использую следующий скрипт для публикации данных на внешнем сайте. В приведенном ниже примере $ 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 Ответ

1 голос
/ 05 марта 2012

Возможно, вы захотите, чтобы вы передали ПОЛЬЗОВАТЕЛЬСКОГО АГЕНТА вместе со своими заголовками. Я работал над проектами, которые требовали от нас входа в удаленные системы, чтобы мы могли извлекать данные, но в некоторых из этих систем, если мы не передадим действительный пользовательский агент, мы не получим доступ, даже если учетные данные для входа были установлен правильно.

...