1
次のスクリプトを使用して外部サイトにデータを送信しています。以下の例では、$ method、$ url、および$ postdataはすでにユーザーによって収集されています。彼らはのfopen()リクエストを好きではないので、PHPから送信されたHTTPリクエストの403エラーを防ぐには?
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を返送します。これを回避する方法はありますか?代わりにcURLを使用すると、403が防止されますか?もしそうなら、上記を行うためのcURLの方法は何でしょうか?ありがとう。
403はfopen vs cURLとはほとんど関係がありませんが、一般的にあなたの呼び出しが気に入らないという事実です。これは、referer(または、好きではないreferer、ホットリンク保護を呼び出す)が不足している可能性があります。また、アクセスしようとしているURLがパスワードで保護されているか、単に禁止されているか、特定のセッションCookieが必要な場合もあります。これは実際にサイトによって異なるので、ブランケットの回答はありません。だからこそ、私は間違いなく一般的にcuRLを使用することをお勧めします(そして、そうしたくないサイトを削ってはいけません)。 – Morgon
私は要求されたURLに設定しているので、私はそのrefererとは思わない。そして、それは他のもののどれでもありません。私はcURLソリューションを検討します。そして、私はサイトを削っていません:) – Joey