1
我正在使用以下腳本將數據發佈到外部網站。在下面的例子中,$ method,$ url和$ postdata已經被用戶收集。如何防止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,表面上是因爲他們不喜歡的fopen()請求。有沒有解決的辦法?如果我使用cURL,它會阻止403?而且,如果是這樣,做上述事情的方法是什麼?謝謝。
403與fopen vs cURL沒什麼關係,而是它不喜歡你的電話。這可能是由於缺乏引用者(或者它不喜歡的引用者,引用熱鏈接保護)。它也可能意味着您嘗試訪問的URL是受密碼保護的,僅僅是禁止的,或者需要特定的會話cookie。這在不同的網站之間會有所不同,所以不會有一攬子答案。話雖如此,我肯定會建議一般使用cuRL(並且不要欺騙那些不希望成爲的網站)。 – Morgon 2012-03-04 21:15:31
我不認爲它是引用者,因爲我將它設置爲請求的url。這不是其他的東西。儘管如此,我會研究cURL解決方案。而我不是刮網站:) – Joey 2012-03-04 21:26:26