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