我使用以下脚本将数据发布到外部网站。在下面的示例中,用户已经收集了$ 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的做法是什么?感谢。
答案 0 :(得分:1)
您可能希望确保将USER-AGENT与标题一起传递。我曾经处理过需要我们登录远程系统以便我们可以提取数据的项目,但是在其中一些系统中,如果我们没有通过有效的用户代理,我们就无法获得访问权限,即使登录凭据是设置正确。